赞
踩
本篇文章主要记录如何使用Python爬取动态页面的数据并进行存储。其过程主要如下图所示。
接下来分别介绍一下每部分的内容。
准备请求数据:获取请求URL打开浏览器的开发者工具,点击“Network”(红色方框部分)。
当点击页面链接或者滚动鼠标页面加载数据时,会有网址出现(如蓝色方框所示)。
点击其中一个网址,右边会显示该网址对应的接口信息(如橙色方框所示),其中的“Request URL”就是我们所需要的请求URL。
准备请求数据:代理伪装
def write_browsers_into_file():
#从该网址获取伪装的用户代理
user_agent = requests.get("https://fake-useragent.herokuapp.com/browsers/0.1.11")
#存入本地文件中,以便后续直接读取数据
with open("fake_useragent.json", "w") as f:
json.dump(user_agent.text, f)
2.从伪装代理数据文件中随机获取一个代理
def get_random_fake_useragent():
with open("fake_useragent.json", "r") as f:
#从文件中获取数据
fake_useragents = json.load(f)
#将数据转换为json格式
browser_json = json.loads(fake_useragents)
#获取browser的数据
browsers = browser_json["browsers"]
#随机获取一个browser类型
browser_type = random.randint(0, len(browsers)-1)
browser_name = ""
if browser_type == 0:
browser_name = "chrome"
elif browser_type == 1:
browser_name = "opera"
elif browser_type == 2:
browser_name = "firefox"
elif browser_type == 3:
browser_name = "internetexplorer"
else:
browser_name = "safari"
#根据浏览器的类型获取对应的用户代理
fake_useragent = browsers[browser_name][random.randint(0, len(browsers[browser_name])-1)]
return fake_useragent
准备请求数据:封装请求数据
def get_request_data():
user_agent = get_random_fake_useragent
current_time = int(time.time())
headers = {
"user_agent": user_agent
}
base_url = "https://www.toutiao.com/api/pc/feed/?" \
"category=news_hot&utm_source=toutiao&widen=1&" \
"max_behot_time=" + str(current_time) + "&" \
"max_behot_time_tmp=" + str(current_time) + "&" \
"tadrequire=true&as=A1654D6622F0D5A&cp=5D62109D25EA0E1&" \
"_signature=23DszgAAhho1NrOF4cPowttw7N"
proxies = {
"url": "http://114.235.23.172:9000"
}
return base_url, headers, proxies
发送请求/获取请求数据
def get_response_data():
request_url, headers, proxies = get_request_data()
response = requests.get(request_url, headers=headers, proxies=proxies)
global response_json #设置全局变量,从而保证递归后,返回的结果有数据
response_json = json.loads(response.text)
#如果获取到的是error,则重新获取
if response_json["message"] == "error":
get_response_data()
return response_json
处理/存储数据
#将数据存入文件
def data_into_file(response_json):
data = response_json["data"]
for i in range(len(data)):
data_dict = data[i]
with open("toutiao_data.json", "a+") as f:
json.dump(data_dict, f, ensure_ascii=False)
f.write("\n")
#存入excel
response_data = get_response_data()
data_into_file(response_data)
df = pd.read_json("toutiao_data.json", lines=True)
df.to_excel("toutiao_data.xlsx")
项目结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。