为了减少不必要的步骤,直接加载一下爬虫的基础架构,如下。注意,一定要填写自己的headers的内容
import re
import requests
import time
headers = {
'Cookie': '_ga=GA1.2.1075258978.1586877585; _gid=GA1.2.304073749.1587691875; ',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
} #这里的cookie和header加上自己浏览器的即可
def get_data(url):
html = requests.get(url,headers)
if html.status_code == 200:
print('正在爬取中...')
time.sleep(2)
parse_html(html.text)
else:
print('Error',url)
def parse_html(text):
pass
if __name__ == '__main__':
pass
2. 创建分页url
2.1 网页url规律查找
这里假设使用“python”作为关键词进行搜索,然后习惯的是查看第2、3、4页,这样就可以查找url之间的规律了,后面的参数会有很多,只需要选取有效的部分即可,如下
u2 = https://www.baidu.com/s?wd=python&pn=10&oq=python&ie=utf-8
u3 = https://www.baidu.com/s?wd=python&pn=20&oq=python&ie=utf-8
u4 = https://www.baidu.com/s?wd=python&pn=30&oq=python&ie=utf-8
......
2.2 创建接口输出url测试
一次写的代码要有可扩展性,而不是只针对于具体的内容,最好是保留一个接口,这样可以使得爬虫的程序代码高效,因此需要进行input的输入,然后对于关键词的解析,存在着中文字符,就需要将其转化为可以识别的内容,这里导入urllib库中的parse模块进行关键词的解析,如下。
关于第一条语句的使用,该行代码的意义是什么?功能就是将执行区和功能函数区进行分割,创建接口
if __name__ == "__main__"
一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此该段代码的作用就是控制这两种情况执行代码的过程,在该行代码下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的
也就是该行代码前面就是导入的库和相关定义的函数,该行代码下面就是我们进行的具体赋值和对应的操作
if __name__ == '__main__':
keyword = parse.quote(input('请输入要爬取的关键词:'))
num = eval(input('请输入要爬取的页数:'))
for i in range(0,num):
url = f'https://www.baidu.com/s?wd={keyword}&pn={i*10}&oq={keyword}&ie=utf-8'
print(url)
get_data(url)
→ 输出的结果为:(因为保留的接口,所以可以输入任何关键字,比如以“网易”为例,搜索前3页)
正则表达式在爬虫中使用有两种使用方式,一种是不需要配合bs4直接在源代码中进行数据的匹配(比如爬取B站弹幕时候获取cid信息,爬取酷狗音乐中获取榜单的hash值);还有一种结合bs4进行标签解析结果输出后进行复杂字段信息的提取(豆瓣读书详细信息介绍,链家二手房的详细信息介绍)
3.1 直接匹配源代码这时候就不是进入检查界面了,而是直接在搜索结果的界面鼠标右键,然后在弹出的选项中选择“查看网页源代码”,把要爬取的标题在弹出“源代码”中进行数据匹配,查看保存需求数据的格式,比如就是以刚刚的搜索python为例,选择标题和其对应的url为获取对象
流程步骤解析:【复制要爬取的内容】→ 【目标页面右键进入源代码页面】→ 【ctrl+f调出查找窗口】→ 【在小窗中粘贴复制的内容】→ 【找到目标数据的格式规律】→ 【使用正则替换掉目标数据】→ 编写代码
流程图解,如下,注意箭头及对应的标号。
原创文章 158获赞 90访问量 4万+
关注
私信
展开阅读全文
作者:Be_melting