Python爬虫练习:微博热搜爬虫,微博爬虫 和 主页博文爬虫
By Long Luo
微博热搜爬虫
前几天外甥女要我帮她完成一个小作业,用 Python 完成一个爬虫,于是在网上找了点资料1 和 Github 上找了个爬虫2 的例子,改简单了点,只爬取 微博热搜 数据并存储到 Excel 中,使用 Python Jupyter 编写。
具体代码见:https://github.com/longluo/spider/blob/master/weibohot.ipynb 。
微博爬虫
微博爬虫 3 的代码及功能太多太复杂,但我目前只需要爬取下列信息:
- 个人信息
- 具体时间段全部博文;
- 将数据存入 Excel 和数据库中。
所以需要精简其代码。
微博API
微博获取个人信息API:https://weibo.cn/1565668374/info
微博获取个人全部博文API:https://weibo.cn/1565668374?page=1
具体代码见:https://github.com/longluo/spider/blob/master/weibo.py 。
博客爬虫
在写完上述两个爬虫之后,趁热打铁,也把之前自己一直想做完的功能做完了!
功能
- 获取某网站的全部博文比如 https://www.longluo.me/ 。
- 爬取内容:文章标题、发布时间、分类、链接、正文(HTML格式)等。
分析
- 向目标网页发出请求
Header 是请求头信息的,添加的键值对越多,目标网站就越认为你是真实的用户,但我的网站没有反爬虫措施,所以 Header 里面就只有 User-Agent 键值对,用来描述你的操作系统、浏览器等信息。
- 获取网站博客的文章标题、发布时间和链接;
- 数据写入Excel中;
- 数据存入数据库中。
实现
获取全部博文标题、发布时间和链接
全部博文列表位于 https://www.longluo.me/archives/ 中,首先我们要获取的是总共有多少页呢?
总页数
查看网页源代码,我们可以看见全部页数为 <span class="space">&hellip;</span><a class="page-number" href="/archives/page/48/">48</a>
,所以我们只需要解析出来即可。
参考网络代码4 ,利用BeautifulSoup解析HTML,然后利用正则表达式匹配,代码如下所示:1
2
3
4
5
6
7
8
9
10def get_total_page(self):
html = self.get_html(self.archivesUrl)
page_number = re.compile('[0-9]+')
soap = BeautifulSoup(html, 'html.parser')
page_item = soap.find_all('a', class_="page-number")
total_pages = re.findall(page_number, str(page_item))[-1]
return int(total_pages)