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()
呈现结果: