脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 详解Python爬虫爬取博客园问题列表所有的问题

详解Python爬虫爬取博客园问题列表所有的问题

2021-08-26 00:34Winqihe Python

这篇文章主要介绍了详解Python爬虫爬取博客园问题列表所有的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一.准备工作

  • 首先,本文使用的技术为 python+requests+bs4,没有了解过可以先去了解一下。
  • 我们的需求是将博客园问题列表中的所有问题的题目爬取下来。

详解Python爬虫爬取博客园问题列表所有的问题

二.分析:

  • 首先博客园问题列表页面右键点击检查
  • 通过Element查找问题所对应的属性或标签

详解Python爬虫爬取博客园问题列表所有的问题

可以发现在div class ="one_entity"中存在页面中分别对应每一个问题
接着div class ="news_item"中h2标签下是我们想要拿到的数据

三.代码实现

首先导入requests和BeautifulSoup

  1. import requests
  2. from bs4 import BeautifulSoup

由于很多网站定义了反爬策略,所以进行伪装一下

  1. headers = {
  2. 'User-Agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 87.0.4280.141Safari / 537.36'
  3. }

在这里User-Agent只是其中的一种方式,而且大家的User-Agent可能不同。

爬取数据main代码

  1. url = 'https://q.cnblogs.com/list/unsolved?'
  2. fp = open('blog', 'w', encoding='utf-8')
  3. for page in range(1,26):
  4. page = str(page)
  5. param = {
  6. 'page':page
  7. }
  8. page_text = requests.get(url=url,params=param,headers=headers).text
  9. page_soup = BeautifulSoup(page_text,'lxml')
  10. text_list = page_soup.select('.one_entity > .news_item > h2')
  11. for h2 in text_list:
  12. text = h2.a.string
  13. fp.write(text+'\n')
  14. print('第'+page+'页爬取成功!')

注意一下这里,由于我们需要的是多张页面的数据,所以在发送请求的url中我们就要针对不同的页面发送请求,https://q.cnblogs.com/list/unsolved?page=我们要做的是在发送请求的url时候,根据参数来填充页数page,
代码实现:

  1. url = 'https://q.cnblogs.com/list/unsolved?'
  2. for page in range(1,26):
  3. page = str(page)
  4. param = {
  5. 'page':page
  6. }
  7. page_text = requests.get(url=url,params=param,headers=headers).text

将所有的h2数组拿到,进行遍历,通过取出h2中a标签中的文本,并将每取出来的文本写入到文件中,由于要遍历多次,所以保存文件在上面的代码中。

  1. text_list = page_soup.select('.one_entity > .news_item > h2')
  2. for h2 in text_list:
  3. text = h2.a.string
  4. fp.write(text+'\n')

完整代码如下:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. if __name__ == '__main__':
  4. headers = {
  5. 'User-Agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 87.0.4280.141Safari / 537.36'
  6. }
  7. url = 'https://q.cnblogs.com/list/unsolved?'
  8. fp = open('blog', 'w', encoding='utf-8')
  9. for page in range(1,26):
  10. page = str(page)
  11. param = {
  12. 'page':page
  13. }
  14. page_text = requests.get(url=url,params=param,headers=headers).text
  15. page_soup = BeautifulSoup(page_text,'lxml')
  16. text_list = page_soup.select('.one_entity > .news_item > h2')
  17. for h2 in text_list:
  18. text = h2.a.string
  19. fp.write(text+'\n')
  20. print('第'+page+'页爬取成功!')

四.运行结果

运行代码:

详解Python爬虫爬取博客园问题列表所有的问题

详解Python爬虫爬取博客园问题列表所有的问题

到此这篇关于详解Python爬虫爬取博客园问题列表所有的问题的文章就介绍到这了,更多相关Python爬虫爬取列表内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_45462732/article/details/112682565

延伸 · 阅读

精彩推荐