新手中的新手,为了学习,尝试从这里出发---
举个例子:
新闻网站https://news.qq.com/,通过查看网页发现,网址进去之后,分页是下拉加载,只能通过浏览器的开发者工具查看分页网址
是Ajax形式的get带参数的请求方式,获取响应内容不再是页面数据,而是json字符串 ,通过参数offset和limit控制条数,获取不同的新闻内容,上代码
import requests
from bs4 import BeautifulSoup
from xlwt import *
import json
# 这种形式,在这里不能用
# user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
url = 'https://i.news.qq.com/trpc.qqnews_web.kv_srv.kv_srv_http_proxy/list?'
params = {
'sub_srv_id': '24hours',
'srv_id': 'pc',
'offset': '0',
'limit': '100',
'strategy': '1',
'ext': '{"pool":["top"],"is_filter":7,"check_type":true}'
}
# 保存到Excel
def save_excel(self):
num = 1
title_file = Workbook(encoding="utf-8") # 存为Excel,以 utf-8 编码打开
table = title_file.add_sheet('data') # 打开“data” 工作薄
# 存入表头
table.write(0, 0, "发布时间")
table.write(0, 1, "标题")
table.write(0, 2, "内容地址")
# all_data = self.send_url() # 调用send_url()中 yield 的返回值
for data in self: # data 数据为元组类型
# href = url + data.get('href')
# title = data.string
table.write(num, 0, data["publish_time"])
table.write(num, 1, data["title"])
table.write(num, 2, data["url"])
print
"saving done..."
num += 1
title_file.save("002.xls") # 保存文件
# Ajax获取分页数据
def get_ajax():
# 发起ajax的get请求还是用get方法
response = requests.get(url=url, params=params, headers=headers)
# 获取响应内容:响应内容为json字符串
data = response.text
# 把Json格式字符串解码转换成Python对象 从json到python的类型
data = json.loads(data)
# 操作json,获取元素
data = data["data"]
data = data["list"]
save_excel(data)
#for data_dict in data:
# print(data_dict["title"], data_dict["url"])
if __name__ == "__main__":
get_ajax()
上面使用的 requests BeautifulSoup需要安装一下
pip install requests
easy_install requests
这两种方式都可以安装。
ps:当然后续可以保持到文件中,目前还没有封装,继续。。。
已更新保持到Excel中