GitHub 代码地址https://github.com/injetlee/Python/blob/master/qiubai_crawer.pyhtml
微信公众号:【智能制造社区】,欢迎关注。python
爬虫也称网页蜘蛛,主要用于抓取网页上的特定信息。这在咱们须要获取一些信息时很是有用,好比咱们能够批量到美图网站下载图片,批量下载段子。省去手工操做的大量时间。爬虫程序通常是经过模拟浏览器对相应URL发出请求,获取数据,并经过正则等手段匹配出页面中咱们所需的数据。git
在学习爬虫以前,最好到 w3school 去了解一下 HTML 标签的概念以及基本的 CSS 的概念。这会让咱们更容易的理解如何获取页面中某个内容。github
Requests 是学习爬虫的一大利器。是一个优雅简单的 HTTP库。官网介绍以下:正则表达式
Requests: HTTP for Humans
专门为人类使用的 HTTP 库。使用起来很是简单明了。
咱们平时浏览网页的步骤是输入网址,打开。在 Requests 中是以下这样的,咱们能够在 Python 交互式解释器中输入如下代码:浏览器
import requests r = requests.get('https://www.qiushibaike.com/text/') # 打开网址,通常咱们会设置 请求头,来更逼真的模拟浏览器,下文有介绍 r.text
我门看到下面一堆的代码,其实就是网页的源代码(也能够在浏览器上右键查看页面源代码)。经过这几行代码咱们就拿到了页面的全部信息,剩下的就是从页面中找到咱们所须要的信息。微信
拿到网页信息后,咱们要解析页面,一般来讲咱们有如下几种方式来解析页面,获取咱们所需的信息。学习
正则表达式网站
Lxmlui
Beautiful Soup
本文做为入门教程,就从 Beautiful Soup 入手,来学习一下匹配页面所需元素的方法。
假若有如下 HTML 内容 example.html
<html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Page Title</title> </head> <body> <div class='main-page'> <ul class='menu-list'> <li>首页</li> <li>新闻</li> <li>影视</li> </ul> </div> </body> </html>
咱们经过 Beautiful Soup 来解析这个 html. 首先咱们pip install beautifulsoup4
安装这个库,并看一下简单使用。
>>>from bs4 import BeautifulSoup >>>soup = BeautifulSoup('example.html', 'html.parser') #加载咱们的html文件 >>>soup.find('div') # 找到 div 标签 '<div class="main-page"> <ul class="menu-list"> <li>首页</li> <li>新闻</li> <li>影视</li> </ul> </div>' >>>soup.find_all('li') # 找到全部 li 标签 '[<li>首页</li>, <li>新闻</li>, <li>影视</li>]' >>>for i in li: print(i.text) #获取每一个 li 标签的内容 ' 首页 新闻 影视 '
详细的操做能够去看一下文档,文档很是详细,例子也不少,简单明了。
咱们先爬取纯文本的内容 https://www.qiushibaike.com/t... 爬取这个连接下的内容。咱们把页面结构截图以下,咱们要获取的信息,我用红色的方框进行了标注。
图一:
图二:
import requests from bs4 import BeautifulSoup def download_page(url): headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"} r = requests.get(url, headers=headers) # 增长headers, 模拟浏览器 return r.text def get_content(html, page): output = """第{}页 做者:{} 性别:{} 年龄:{} 点赞:{} 评论:{}\n{}\n------------\n""" # 最终输出格式 soup = BeautifulSoup(html, 'html.parser') con = soup.find(id='content-left') # 如图一红色方框 con_list = con.find_all('div', class_="article") # 找到文章列表 for i in con_list: author = i.find('h2').string # 获取做者名字 content = i.find('div', class_='content').find('span').get_text() # 获取内容 stats = i.find('div', class_='stats') vote = stats.find('span', class_='stats-vote').find('i', class_='number').string comment = stats.find('span', class_='stats-comments').find('i', class_='number').string author_info = i.find('div', class_='articleGender') # 获取做者 年龄,性别 if author_info is not None: # 非匿名用户 class_list = author_info['class'] if "womenIcon" in class_list: gender = '女' elif "manIcon" in class_list: gender = '男' else: gender = '' age = author_info.string # 获取年龄 else: # 匿名用户 gender = '' age = '' save_txt(output.format(page, author, gender, age, vote, comment, content)) def save_txt(*args): for i in args: with open('qiubai.txt', 'a', encoding='utf-8') as f: f.write(i) def main(): # 咱们点击下面连接,在页面下方能够看到共有13页,能够构造以下 url, # 固然咱们最好是用 Beautiful Soup找到页面底部有多少页。 for i in range(1, 14): url = 'https://qiushibaike.com/text/page/{}'.format(i) html = download_page(url) get_content(html, i) if __name__ == '__main__': main()
运行代码后,咱们会获得 'qiubai.txt'文件,打开后以下所示