请选择 进入手机版 | 继续访问电脑版

VRPIP 虚拟化平台

 找回密码
 注册VRPIP
搜索
热搜: 活动 交友 discuz
查看: 1537|回复: 0

小白 学pyton 爬虫四

[复制链接]

8

主题

11

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2020-10-3 01:02:45 | 显示全部楼层 |阅读模式
本帖最后由 Tinken 于 2020-10-3 12:44 编辑

前面学了python安装,基本语法(不全)
学了requests,用于网络请求,获取页面内容
学了Beautiful Soup,用于将页面内容进行解码,获得页面中的数据
学了xlwings,用于将页面中的数据保存下来,达到我们最终的目的

小结:
通过以上学习内容,我们可以完成基本的爬虫功能
但是,还有许多的问题需要面对,如
1. requests不断的请求同一网址,势必会被服务器限制,我们还需要学习使用ip代理
2. Beautiful Soup将获取到的内容,通过新的组合方式或者样式,展示到另一个页面上
3. xlwings对Excel的操作还有读取、修改、sheet的建立...等,很多很多
这里,我们需要对以上知识加深印象,并且将现阶段我们了解爬虫 到 掌握爬虫做一个过渡。
一个是消化,消化目前的知识点
一个是便于后面的学习,后面学习内容还有很多,避免学了后面忘了前面

结合以上知识,实际动手:
项目:第一个爬虫
目的:掌握现在知识点
目标站点:http:www.vrpip.com
目标:爬取页面所有帖子主题、发表人、发表时间第一步:内容分析
需要爬取的是帖子相关信息,需要找到相关信息的位置:
每个帖子中都包含有:主题、发表人、发表时间

找到信息都包含在帖子中后,再来分析每个帖子的共同点和不同点:
共同点:帖子结构相同、链接基本相同:http://www.vrpip.com/forum.php?mod=viewthread&tid=62
不同点:链接中的tid不同
第二步:思路
通过第一步的内容分析,我们就可以得到完成目标的思路:
通过requests获取http://www.vrpip.com/forum.php?mod=viewthread&tid=62 的内容
Beautiful Soup解码、xlwings将数据存入Excel
最多,我们通过python的for循环,让每次Beautiful Soup解码、xlwings将数据存入Excel的链接不同,或者说让链接中的tid不同即可:
http://www.vrpip.com/forum.php?mod=viewthread&tid=0,Beautiful Soup解码,xlwings存储至excel
http://www.vrpip.com/forum.php?mod=viewthread&tid=1,Beautiful Soup解码,xlwings存储至excel
http://www.vrpip.com/forum.php?mod=viewthread&tid=2,Beautiful Soup解码,xlwings存储至excel
http://www.vrpip.com/forum.php?mod=viewthread&tid=3,Beautiful Soup解码,xlwings存储至excel
......
第三步:撸代码
代码的思路是:
for循环得到帖子链接
帖子结构相同,我们可以写一个公用的解码函数
所有的数据字段都是一样的,写一个公用的存储函数也够了
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-

  3. # @ClassName test6
  4. # @Description TODO
  5. # @Author lanlo
  6. # @Date 2020-10-03 1:18
  7. # @Version 1.0

  8. import requests
  9. from bs4 import BeautifulSoup
  10. import xlwings as xw
  11. import re

  12. # 帖子相同的url,tid不写,后面通过for来循环拼接真实地址
  13. url = "http://www.vrpip.com/forum.php?mod=viewthread&tid="
  14. # 请求头,模拟浏览器请求
  15. headers = {
  16.         'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
  17.     }

  18. # xlwings 写入Excel => data.xlsx
  19. def writeExcel(list):
  20.     # 这将创建一个新的工作簿
  21.     wb = xw.Book('data.xlsx')
  22.     # 实例化工作表对象
  23.     sht = wb.sheets['Sheet1']
  24.     sht.api.Rows(1).Insert()
  25.     sht.range('A1').value = list
  26.     # 保存
  27.     wb.save()


  28. for i in range(0, 999):
  29.     # forum_url为真实的帖子地址
  30.     # str为python的字符权类型,拼接字符串,需要将数字类型i装换为字符串类型
  31.     forum_url = url + str(i)
  32.     # 打印帖子链接
  33.     print(forum_url)

  34.     # 获取页面内容
  35.     res = requests.get(forum_url, headers=headers)
  36.     # 设置解析器
  37.     html = BeautifulSoup(res.text, "html.parser")

  38.     # 主题 用户昵称 发表时间
  39.     list = []
  40.     try:
  41.         # 获得主题
  42.         print(html.select("#thread_subject")[0].string)
  43.         list.append(html.select("#thread_subject")[0].string)

  44.         # 获得昵称
  45.         print(html.select('a[class="xw1"]')[0].string)
  46.         list.append(html.select('a[class="xw1"]')[0].string)

  47.         # 获得发表时间
  48.         if html.find_all(id=re.compile("authorposton"))[0].span:
  49.             tag1 = html.find_all(id=re.compile("authorposton"))[0].span
  50.             print(html.find_all(id=re.compile("authorposton"))[0].span["title"])
  51.             list.append(html.find_all(id=re.compile("authorposton"))[0].span["title"])
  52.         else:
  53.             print(html.find_all(id=re.compile("authorposton"))[0].string)
  54.             list.append(html.find_all(id=re.compile("authorposton"))[0].string)

  55.         print(list)
  56.         writeExcel(list)
  57.     except:
  58.         print(forum_url + ":帖子未找到")
  59.         list.append(forum_url)
  60.         list.append("帖子未找到")
  61.         writeExcel(list)




复制代码
以上代码运行log


Excel文档:data.xlsx


代码还有待改进的地方:
各种抽象:requests请求、BeautifulSoup...等
代码优化:重复性代码较多
异常处理:如帖子tid:9999一定是没有的,后面其他不可估计的问题...等


好了,这里应将前面的内容融合到一起了,已经有一个爬虫的概念,下一篇开始了解IP代理

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册VRPIP

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册VRPIP

本版积分规则

快速回复 返回顶部 返回列表