Python进阶之前端和爬虫基础

请求头 - 键值对 - 告诉服务器的额外的信息空行(\r\n)消息体 - 你要发给服务器的数据(2)发送请求(3)检测响应状态码常见的响应状态码有:
(4)获取响应内容4、爬虫时如何隐匿自己的身份
法不禁止即为许可 。爬虫是一个灰色地带,总的来说是不违法的,但是我们在进行爬虫时也要注意隐匿自己的身份,爬虫协议:.txt
(1)如何定制请求头(2)如何在网页中查看到’User-Agent’5、如何解析页面?
要了解我们爬取到的是页面的全部信息,但是我们可能只是需要其中的一部分信息,其他繁杂无用的信息都不需要,因此我们要对我们爬取到的页面信息进行解析,从而获取到自己想要的那一部分
(1)正则表达式解析
import reimport requestsresp = requests.get(url='https://movie.douban.com/top250',headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'})# 使用正则表达式捕获组从页面代码中提取电影名称pattern = re.compile(r'\(.*?)\<\/span\>')print(type(pattern))print(pattern.findall(resp.text))
(2)CSS选择器解析
虽然使用正则表达式性能较好,但是由于正则表达式使用起来较难,因此我们更加常用的解析方式是CSS选择器解析,使用起来较为简单
a.了解选择器有哪些b.导入三方库bs4 — Soup 4
Soup 是一个可以从HTML或XML文件中提取数据的库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式
import bs4resp = requests.get('https://www.sohu.com/index.html')if resp.status_code == 200:soup = bs4.BeautifulSoup(resp.text, 'html.parser')
resp = requests.get('https://www.sohu.com/index.html')if resp.status_code == 200:soup = bs4.BeautifulSoup(resp.text, 'html.parser')anchors = soup.select('div.list16>ul>li>a')for anchor in anchors:# 通过标签对象的attrs属性的索引操作获取指定的属性值print(anchor.attrs['title'])
6、封禁IP的反扒措施 (1)如果没登录不能访问,登录之后也还能访问 - 在请求头中强行添加登录信息()(2)不管是否登录都不能访问!!! —> IP代理
网上有很多专业的付费商业代理,一般在我们购买之后,都是提供给我们一个网络API接口(URL),通过请求这个接口就可以获得代理的信息 。
以蘑菇代理举例:
resp = requests.get('http://piping.mogumiao.com/proxy/api/get_ip_bs?appKey=d36d8b6f1703481eb6c07cc78b3be0c1&count=5&expiryDate=0&format=1&newLine=2')# json是将返回的键值对变成字典,再放到列表里面,拿到代理服务器的列表proxy_list = resp.json()['msg']for page in range(10):# 随机抽出来一个代理服务器字典proxy_dict = random.choice(proxy_list)ip, port = proxy_dict['ip'], proxy_dict['port']try:resp = requests.get(url=f'https://movie.douban.com/top250?start={page*25}',headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'},# 设置代理proxies={# 'http': f'http://{ip}:{port}','https': f'http://{ip}:{port}'# http还是https,要和URL保持一致},timeout=3,verify=False)
7、商业爬虫项目,要提前创建好代理池()
【Python进阶之前端和爬虫基础】resp = requests.get(url=f'https://movie.douban.com/top250?start={page*25}',# 商业爬虫项目,需要提前创建好一个cookies池,每次请求从池子中随机选择一组cookies池headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36','Cookie': 'll="118318"; bid=hXdgbkzPeJk; __utmz=30149280.1609834076.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmz=223695111.1609834112.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __gads=ID=f2030357b13e661c-22c60d118dc500e4:T=1609840601:RT=1609840601:S=ALNI_MZx7S3mwNu_4fmaxmLsq20IlV3-0g; _vwo_uuid_v2=D579DA2B17F60E6D942734D1F3D975CCE|a4ed238b8f9fb09cd5f70bdb39a4e433; __yadk_uid=v1F1uNJZRDv3uEbSShXyw7NSqp36GVTd; dbcl2="229808144:LsAFGkwzIc8"; push_noty_num=0; push_doumail_num=0; __utmv=30149280.22980; douban-profile-remind=1; ck=Igw5; __utmc=30149280; __utmc=223695111; ap_v=0,6.0; __utma=30149280.171995204.1609834076.1609901169.1609916179.6; __utmb=30149280.0.10.1609916179; __utma=223695111.1649735111.1609834112.1609901169.1609916179.6; __utmb=223695111.0.10.1609916179; _pk_ses.100001.4cf6=*; _pk_id.100001.4cf6=f6918bb273f7004a.1609834112.6.1609917103.1609901181.'})