最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

python爬虫:怎么选择寻找请求地址

IT圈 admin 2浏览 0评论

python爬虫:怎么选择/寻找请求地址

爬虫问题

  • 需求
    • 第一种方式
    • 第二种方式
  • 问题
  • 完整代码

我现在需要爬取一份网站数据:

需求

.htm
爬取包括:
“文章发布时间
文章标题
链接”
特定时间:2019.1.1-2019.11.30

但是在请求网址的时候出现了问题

如图,因为不知道所要请求的网址是哪个,就全试了一下。发现:

第一种方式

当请求第一个url的时候,可以返回html源代码,但是里面没有列表元素

这样就无法找到自己需要的信息了。


第二种方式

所以我又请求了第二个网址,但得到的是


可以找到需要的信息,但在preview里的data里面,不知道如何提取出来。


问题

在以上问题中

1.在爬虫请求中,我该使用哪个网址?

必须第二个,因为第一个网站得不到需要的数据。

2.如果是第二种的话,我现在已经得到了data数据,如何分离出来?

  • 使用print(type(return_html)),可以看见得到的是一个json类型的字符串,现在需要将此字符串转换成json类型。使用json.loads()函数转换。
 for url_ in url_li:r_html = get_html(url_)json_html = json.loads(r_html)
  • 转换后再执行print(type(return_html))可以看见现在已经是dict了
  • 然后调用字典取值相关的就可以拿到数据了
    for item in range(14):Title = rl_html['data']['list'][item]['Title']date = rl_html['data']['list'][item]['PubTime']T_url = rl_html['data']['list'][item]['LinkUrl']k_words = rl_html['data']['list'][item]['keyword']

完整代码

import csv
import requests
import jsondef get_html(url_):headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) ……'}html = requests.get(url_, headers=headers)html.encoding = 'utf-8'return html.textdef get_info(rl_html):rum_inf_list = []for item in range(14):Title = rl_html['data']['list'][item]['Title']date = rl_html['data']['list'][item]['PubTime']T_url = rl_html['data']['list'][item]['LinkUrl']k_words = rl_html['data']['list'][item]['keyword']rumour_dic = {}rumour_dic['title'] = ''.join(Title)rumour_dic['date'] = daterumour_dic['url'] = T_urlrumour_dic['keywords'] = k_wordsrum_inf_list.append(rumour_dic)return rum_inf_listdef writeData(rumour_list):with open('./Roumour.csv','w',encoding='utf-8',newline='') as f:writer = csv.DictWriter(f,fieldnames=['title','date','url','keywords'])writer.writeheader() # 写入表头for each in rumour_list:writer.writerow(each)
def main():rumour_list = []url_li = []page = 1  # page<23即可for page in range(1, 23):url = '=11158867&pgnum={}&cnt=14'.format(page)page += 1url_li.append(url)for url_ in url_li:r_html = get_html(url_)json_html = json.loads(r_html)rumour_list += get_info(json_html)print("正在爬取中……")writeData(rumour_list)print("爬取完成👌 👌 👌 👌 ")if __name__ == '__main__':main()

呈现结果:

python爬虫:怎么选择/寻找请求地址

爬虫问题

  • 需求
    • 第一种方式
    • 第二种方式
  • 问题
  • 完整代码

我现在需要爬取一份网站数据:

需求

.htm
爬取包括:
“文章发布时间
文章标题
链接”
特定时间:2019.1.1-2019.11.30

但是在请求网址的时候出现了问题

如图,因为不知道所要请求的网址是哪个,就全试了一下。发现:

第一种方式

当请求第一个url的时候,可以返回html源代码,但是里面没有列表元素

这样就无法找到自己需要的信息了。


第二种方式

所以我又请求了第二个网址,但得到的是


可以找到需要的信息,但在preview里的data里面,不知道如何提取出来。


问题

在以上问题中

1.在爬虫请求中,我该使用哪个网址?

必须第二个,因为第一个网站得不到需要的数据。

2.如果是第二种的话,我现在已经得到了data数据,如何分离出来?

  • 使用print(type(return_html)),可以看见得到的是一个json类型的字符串,现在需要将此字符串转换成json类型。使用json.loads()函数转换。
 for url_ in url_li:r_html = get_html(url_)json_html = json.loads(r_html)
  • 转换后再执行print(type(return_html))可以看见现在已经是dict了
  • 然后调用字典取值相关的就可以拿到数据了
    for item in range(14):Title = rl_html['data']['list'][item]['Title']date = rl_html['data']['list'][item]['PubTime']T_url = rl_html['data']['list'][item]['LinkUrl']k_words = rl_html['data']['list'][item]['keyword']

完整代码

import csv
import requests
import jsondef get_html(url_):headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) ……'}html = requests.get(url_, headers=headers)html.encoding = 'utf-8'return html.textdef get_info(rl_html):rum_inf_list = []for item in range(14):Title = rl_html['data']['list'][item]['Title']date = rl_html['data']['list'][item]['PubTime']T_url = rl_html['data']['list'][item]['LinkUrl']k_words = rl_html['data']['list'][item]['keyword']rumour_dic = {}rumour_dic['title'] = ''.join(Title)rumour_dic['date'] = daterumour_dic['url'] = T_urlrumour_dic['keywords'] = k_wordsrum_inf_list.append(rumour_dic)return rum_inf_listdef writeData(rumour_list):with open('./Roumour.csv','w',encoding='utf-8',newline='') as f:writer = csv.DictWriter(f,fieldnames=['title','date','url','keywords'])writer.writeheader() # 写入表头for each in rumour_list:writer.writerow(each)
def main():rumour_list = []url_li = []page = 1  # page<23即可for page in range(1, 23):url = '=11158867&pgnum={}&cnt=14'.format(page)page += 1url_li.append(url)for url_ in url_li:r_html = get_html(url_)json_html = json.loads(r_html)rumour_list += get_info(json_html)print("正在爬取中……")writeData(rumour_list)print("爬取完成👌 👌 👌 👌 ")if __name__ == '__main__':main()

呈现结果:

发布评论

评论列表 (0)

  1. 暂无评论