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

爬虫问题

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

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

需求

http://www.piyao.org.cn/zjsj.htm
爬取包括:
“文章发布时间
文章标题
链接”
特定时间:2019.1.1-2019.11.30

但是在请求网址的时候出现了问题
python爬虫:怎么选择/寻找请求地址_第1张图片
如图,因为不知道所要请求的网址是哪个,就全试了一下。发现:

第一种方式

当请求第一个url的时候,可以返回html源代码,但是里面没有列表元素
python爬虫:怎么选择/寻找请求地址_第2张图片
这样就无法找到自己需要的信息了。


第二种方式

所以我又请求了第二个网址,但得到的是
python爬虫:怎么选择/寻找请求地址_第3张图片
python爬虫:怎么选择/寻找请求地址_第4张图片
可以找到需要的信息,但在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 json


def 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.text


def 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'] = date
        rumour_dic['url'] = T_url
        rumour_dic['keywords'] = k_words

        rum_inf_list.append(rumour_dic)

    return rum_inf_list

def 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 = 'http://da.wa.news.cn/nodeart/page?nid=11158867&pgnum={}&cnt=14'.format(page)
        page += 1
        url_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爬虫:怎么选择/寻找请求地址_第5张图片

你可能感兴趣的:(python小白,笔记,小tips,python,json,爬虫,搜索引擎,java爬虫程序,爬虫搜索,关键字搜索,数据抓取,爬虫,jsoup)