2.鼠标右键浏览器,点击检查,进入开发者模式对数据进行分析
3.之后点击Network,选择XHR,会发现什么都没有,鼠标点到浏览器上方的地址栏,按回车进行刷新
4.刷新之后会发现只有一条数据,鼠标点击
5.我们这里只用Headers和Respone,Headers是浏览器请求的一些数据,Respone是后台返回的数据
6.第一步分析Headers; Request URL 是浏览器请求的url地址(一会写python代码用这个url请求),方式为get请求
7.鼠标滚轮向下翻找到Request Headers,会看到有user-agent ,cookie,这个有什么用呢?所有网站都会有反爬,这里user-agent写python代码会用到,用来伪装成谷歌浏览器访问后台,而cookie有时候有时候不写也能爬取到(爬取不到就再下面的python代码中加上)
8.第二步分析Response,这是一个json数据,ctrl+a全选,ctrl+c复制所有数据到json在线解析上(百度json解析,第一个就是,网址:http://www.bejson.com/ )
9.选择json在线编辑器
10第一步:ctrl+a,先把原来的数据删除掉,ctrl+v把上面第8步复制的数据粘贴过来,第二步:点击格式化json数据,第三步:点击将json数据对象化
11.分析json数据,经分析,会发现title(标题)都在data里,我们需要将json串转化成字典,之后根据键取出data的数据
12.要进行分页爬取,这个offset参数代表的就是页码
13.鼠标滚轮向下滚,会发现offset以20递增,由此可见一共8页
1.导入json包,requests包;json直接就可以导入,requests需要下载;点击file—setting
选择Project:
右边点击加号
先搜索requests包,点击安装
2.python正式开始爬取,先导入这两个包
import requests
import json
3.写个主函数,手动输入起始页和终止页,并调用一个page函数
if __name__ == '__main__':
startPage = int(input("请输入起始页码"))
endPage = int(input("请输入终止页码"))
page(startPage,endPage)
4.page函数接收起始页和终止页,for循环页码,url是上面分析的url,要将offset={}用来拼接页码(i就是页码,但是得*20,因为每增加一页是以offset=20递增的),调用loadPage(url),把url传过去,返回个布尔值(返回False代表读取完所有页了,终止当前函数)
def page(startPage, endPage):
for i in range(startPage-1, endPage):
print("当前第%s页" % (i+1))
url="https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset={}&format=json&keyword=77%E4%BA%8B%E5%8F%98&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis×tamp=1562467283218".format(i*20)
isPage=loadPage(url)
if isPage==False:
return
5.loadPage(url)接收url,设置个字典形式的请求头headers,用来伪装浏览器,
将上面分析到的user-agent和cookie复制到里面
def loadPage(url):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"cookie":"tt_webid=6710713392061285902; WEATHER_CITY=%E5%8C%97%E4%BA%AC; tt_webid=6710713392061285902; UM_distinctid=16bc9db8a29f6-0417349b599406-516d3e71-13c680-16bc9db8a2d85; csrftoken=5eb2a0e00bcbb888f417ef261ee5269a; CNZZDATA1259612802=1761938442-1562456487-https%253A%252F%252Fwww.baidu.com%252F%7C1562461887; s_v_web_id=ddb620b1224506f21ba99de20d4169e3; __tasessionId=ned4t635k1562467258609"
}
#try异常,为什么出现异常?当所有也访问完,data为空,会出'NoneType' object is not iterable异常
try:
#将url和headers绑定发送请求,.text是拿到json串
data = requests.get(url, headers=headers).text
#将json传化成字典
news = json.loads(data)
#遍历字典的data数据
for new in news["data"]:
#如果有title,就输出
if "title" in new.keys():
print(new["title"])
except Exception as e:
print(e)
#返回false就代表所有也已经读取完了
return False
return True
import requests
import json
def page(startPage, endPage):
for i in range(startPage-1, endPage):
print("当前第%s页" % (i+1))
url="https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset={}&format=json&keyword=77%E4%BA%8B%E5%8F%98&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis×tamp=1562467283218".format(i*20)
isPage=loadPage(url)
if isPage==False:
return
def loadPage(url):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"cookie":"tt_webid=6710713392061285902; WEATHER_CITY=%E5%8C%97%E4%BA%AC; tt_webid=6710713392061285902; UM_distinctid=16bc9db8a29f6-0417349b599406-516d3e71-13c680-16bc9db8a2d85; csrftoken=5eb2a0e00bcbb888f417ef261ee5269a; CNZZDATA1259612802=1761938442-1562456487-https%253A%252F%252Fwww.baidu.com%252F%7C1562461887; s_v_web_id=ddb620b1224506f21ba99de20d4169e3; __tasessionId=ned4t635k1562467258609"
}
try:
data = requests.get(url, headers=headers).text
news = json.loads(data)
for new in news["data"]:
if "title" in new.keys():
print(new["title"])
except Exception as e:
print(e)
return False
return True
if __name__ == '__main__':
startPage = int(input("请输入起始页码"))
endPage = int(input("请输入终止页码"))
page(startPage,endPage)