前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 刚接触Python的新手、小白,可以复制下面的链接去观看Python的基础入门教学视频 https://v.douyu.com/author/y6AZ4jn9jwKW 基本开发环境
import parselimport requestsimport re 目标网页分析
如何提取url地址 1、转成json,键值对取值; 两种方法都可以实现,看个人喜好 根据接口数据链接中的pager 变化进行翻页,其对应的就是页码。
保存方式 1、你可以保存txt文本形式 整体爬取思路总结在栏目列表页中,点击更多新闻内容,获取接口数据url 接口数据url中返回的数据内容中匹配新闻详情页url 使用常规解析网站操作(re、css、xpath)提取新闻内容 保存数据 代码实现获取网页源代码 def get_html(html_url):"""获取网页源代码 response :param html_url: 网页url地址 :return: 网页源代码"""response = requests.get(url=html_url, headers=headers)return response 获取每篇新闻url地址 def get_page_url(html_data):"""获取每篇新闻url地址 :param html_data: response.text :return: 每篇新闻的url地址"""page_url_list = re.findall('"url":"(.*?)"', html_data)return page_url_list 文件保存命名不能含有特殊字符,需要对新闻标题进行处理 def file_name(name):"""文件命名不能携带 特殊字符 :param name: 新闻标题 :return: 无特殊字符的标题"""replace = re.compile(r'[\\\/\:\*\?\"\<\>\|]') new_name = re.sub(replace, '_', name)return new_name 保存数据 def download(content, title):"""with open 保存新闻内容 txt :param content: 新闻内容 :param title: 新闻标题 :return:"""path = '新闻\\' + title + '.txt'with open(path, mode='a', encoding='utf-8') as f: f.write(content)print('正在保存', title) 主函数 def main(url):"""主函数 :param url: 新闻列表页 url地址 :return:"""html_data = get_html(url).text # 获得接口数据response.textlis = get_page_url(html_data) # 获得新闻url地址列表for li in lis: page_data = get_html(li).content.decode('utf-8', 'ignore') # 新闻详情页 response.textselector = parsel.Selector(page_data) title = re.findall('<title>(.*?)</title>', page_data, re.S)[0] # 获取新闻标题new_title = file_name(title) new_data = selector.css('#cont_1_1_2 div.left_zw p::text').getall() content = ''.join(new_data) download(content, new_title)if __name__ == '__main__':for page in range(1, 101): url_1 = 'https://channel.chinanews.com/cns/cjs/gj.shtml?pager={}&pagenum=9&t=5_58'.format(page) main(url_1) 运行效果图 |
|