爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。
1.爬虫的类型:小爬(各种库来爬)、中爬(各种框架)、大爬(各种搜索引擎)。
2.目的:解决数据来源的问题、做行业分析、完成自动化操作、按小的来讲可以爬取自己喜欢的东西 。
3.目标类型:新闻、博客、微博、各种网站等的图片,文字,视频等。
需要导入或者安装几个python库,如下:
import requests
import csv
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
流程:
1.我们需要获取手机数据,首先获取所有手机的网页源码,以及URL地址如下:
2.下面是完整代码:
# _* coding: utf-8 _*_
# _author_:zeng
#2020/8/24_15:16
import requests
import csv
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
# 使用requests库中的.get方法发送一个请求至京东电脑页面,头部修改为浏览器访问,否则默认为python
def download(url, headers, num =3):
#打印网站
print("下载的网址:",url)
response = requests.get(url,headers=headers)
print(requests.status_codes)
try:
if response.status_code == 200:
return response.content
return None
# 如果相应的状态码为:200 那么return 返回网站源码,如果访问非200则调用重试
except RequestException as rr:
print(rr.response)
html = ""
if hasattr(rr.response, 'status_code'):
code = rr.response.status_code
print('error code', code)
if num > 0 and 500 <= code < 600:
html = download(url, headers, num - 1)
else:
code = None
return html
#定义查找手机的方法
def find_Iphone(url, headers):
#调用download函数,成功则返回网页源码赋值给r的变量
r = download(url, headers=headers)
#使用bs4 方法生成page对象
page = BeautifulSoup(r,"lxml")
#通过find_all方法找到所有关于电脑的源码赋值给的all_items
all_items = page.find_all('li', attrs={'class':'gl-item'})
#把获取到的内容写入Iphone.csv
with open("D:\Pycharm\Iphone.csv", 'w', newline='',encoding='utf-8') as f:
write = csv.writer(f)
fields = ('ID', '价格', '名称' )
write.writerow(fields)
#对所有京东页面的手机源码进行循环
for all in all_items:
#获取手机id
Iphone_id = all["data-sku"]
print(f"手机ID为:{Iphone_id}")
#获取手机价格
Iphone_price = all.find('div', attrs={'class': 'p-price'}).find('i').text
print(f"手机的价格为:{Iphone_price}元")
#获取手机名字
Iphone_name = all.find('div', attrs={'class': 'p-name p-name-type-2'}).find('em').text
print(f"手机的名称为:{Iphone_name}")
#定义一个集合
row = []
#把手机的id,价格,名字,添加到集合
row.append(Iphone_id)
row.append(str(Iphone_price) + "元")
row.append(Iphone_name)
#写入集合
write.writerow(row)
#关闭i/o流
f.close()
def main():
#设置头部文件
headers = {
'User-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
"referer":"https://passport.jd.com"
}
#京东搜索手机的URL地址
URL = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=0c09bef5047a4c9ba5e5c5d8ec08970a"
#调用find_Iphone方法
find_Iphone(URL,headers=headers)
if __name__ == '__main__':
main()