python网页数据抓取(用Python写爬虫工具(二):Python模拟浏览器发起请求)
优采云 发布时间: 2022-03-18 14:22python网页数据抓取(用Python写爬虫工具(二):Python模拟浏览器发起请求)
现在用Python写爬虫工具已经是家常便饭了,大家都希望自己写一个程序,从网上抓取一些信息,进行数据分析或者其他的事情。
我们知道爬虫的原理无非就是把目标网站的内容下载下来,存储在内存中。这时候它的内容其实就是一堆HTML,然后按照自己的思路解析HTML内容,提取出想要的数据。,所以今天我们主要讲一下Python中解析网页HTML内容的四种方法,各有千秋,适合不同场合使用。
首先,我们随机找到了一个网站。这时,豆瓣网站在我脑海中闪过。好吧,毕竟网站是用Python构建的,所以我们以它为例。
我们找到了豆瓣的Python爬虫群首页,如下图。
让我们使用浏览器开发工具查看 HTML 代码并找到所需的内容。我们要提取讨论组中的所有帖子标题和链接。
通过分析,我们发现我们想要的内容其实是在整个HTML代码的这个区域,所以我们只需要想办法把这个区域的内容取出来即可。
现在开始编写代码。
一:正则表达式大法
正则表达式通常用于检索和替换匹配某种模式的文本,所以我们可以利用这个原理来提取我们想要的信息。
请参考以下代码。
在代码的第6、7行,需要手动指定header的内容,假装这个请求是浏览器请求,否则豆瓣会认为我们的请求不是正常请求,会返回HTTP 418错误。
在第 7 行,我们直接使用 requests 库的 get 方法发出请求。得到内容后,我们需要转换编码格式。也是因为豆瓣的页面渲染机制。一般情况下,我们可以直接获取requests内容的内容。.
Python模拟浏览器发起请求并解析内容代码:
url = 'https://www.douban.com/group/491607/'headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0"}response = requests.get(url=url,headers=headers).content.decode('utf-8')
正则的优点是写起来麻烦,难懂,但是匹配效率很高。但是,在有太多现成的HTML内容解析库之后,我个人不建议手动使用正则来匹配内容,既费时又费力。.
主要解析代码:
<p>re_div = r'[\W|\w]+'pattern = re.compile(re_div)content = re.findall(pattern, str(response))re_link = r'(.*?)</a>'mm = re.findall(re_link, str(content), re.S|re.M)urls=re.findall(r"