使用python写一个爬虫所遇到的问题汇总

本文汇总了使用Python进行网页爬虫时遇到的问题,包括请求头的伪装、处理登录和验证码场景,以及解析数据的方法。同时,介绍了如何获取免费代理和应对网站反爬策略。
摘要由CSDN通过智能技术生成

1、前言

  • 网页上我们能看到的东西,都是可以爬取的。富文本除外。
  • 爬取数据的过程一般来说分为2个阶段:

第一个阶段:发起请求

第二个阶段:使用正则表达式或第三方库解析数据(BeautifulSoup)。

2、发起请求

2.1 请求头的伪装(比较常见的反爬虫策略,会验证请求头里的哪些东西)

from fake_useragent import UserAgent  # 爬虫请求头伪装
import json
from urllib3.exceptions import InsecureRequestWarning
from urllib3 import disable_warnings
disable_warnings(InsecureRequestWarning)  # 禁止https(ssl)问题的报错

ua = UserAgent()  # 爬虫请求头伪装
proxies = {
   
"http": "http://"+proxies_ip,   # http  型的
"https": "http://"+proxies_ip   # https 型的
}

# 定制请求头
my_headers = {
   
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'User-Agent': ua.chrome,
}
response = requests.get(uri,  headers=my_headers,proxies=proxies)

一般来说按照以上的方式来配置请求头大部分的网站你都可以正常爬取了

2.2 有一些网站在爬取过程中需要登录,那么你需要自定义请求头里的cookie

参考:https://docs.python-requests.org/zh_CN/latest/user/quickstart.html#cookie

2.3 如果目标网站在爬取的过程中:还伴随着验证码

图形验证码可以使用一些第三方API对图片进行解析。不过,遇到这个验证码,我建议还是降低爬虫的频率吧!

2.4 常见的异常

  • 当你看到你的程序抛出了抛出ConnectionError错误,那一般就是因为目标网站监测出你是爬虫了。

2、内容解析find_all()使用说明(参考Beautiful Soup 4.9.0 文档)

find_all()
方法签名:find_all(name,attrs,recursive,string,limit,** kwargs)

该find_all()方法浏览标记的后代,并检索与过滤器匹配的所有后代。我在“种类的过滤器”中给出了几个示例,但这里还有更多示例:

soup.find_all("title")
# [<title>The Dormouse's story</title>]

soup.find_all("p", "title")
# [<p class="title"><b>The Dormouse's story</b></p>]

soup.find_all("a")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.find_all(id="link2")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

import re
soup.find(string=re.compile("sisters"))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值