爬取汽车之家新闻 系统管理员 2023-10-09 11:05 73阅读 0赞 爬取汽车之家新闻 * 伪造浏览器向某个地址发送Http请求,获取返回的字符串 * response = requests.get(url = '地址') * response.content * response.encoding = apparent\_encoding * response.text * bs4,解析HTML格式的字符串 * soup = BeautifulSoup('<html>...</html>', "html.parser") * soup.find(name='标签名') * soup.find(name='标签名', id='il') * soup.find(name='标签名', \_class='il') * soup.find(name='div', attrs=\{'id': 'auto-channel-lazyload-article*', 'class': 'id'\})* ## 一、下载页面 ## 首先抓取要爬的页面 import requests ret = requests.get(url="https://www.autohome.com.cn/news/") 此时**print(ret)**返回的是一个对象: <Response \[200\]> 然后再**print(ret.content)**输出如下: ![1353628-20180622155605737-360016547.png][] 上图看出返回的是整个网页文本,不过是以字节形式的文本。 这不是我们需要的,接着再改用**print(ret.text)**输出如下: ![1353628-20180622160138650-1876333291.png][] 此时,出现了恶心的乱码!!!,我们再用encoding对ret进行编码: ret.encoding = 'gbk' 这样可能不是很智能,那我们可以换一种方式: ret.encoding = ret.apparent_encoding 在这里,**print(ret.apparent\_encoding)**可以自动获取网页的编码格式。此时print(ret.text)已经能正常显示网页了: ![1353628-20180622161520359-576354091.png][] ## 二、解析:获取想要的指定内容 ## 此时我们分析汽车之家新闻页面: ![1353628-20180622161726719-1871105258.png][] 初步判断,新闻部分位于id为"auto-channel-lazyload-article"的div下面的li标签中,之所以选择id是因为class名称可能不是唯一的,不好用于过滤 此时,我们需要在py文件头部导入bs4模块,这个模块主要用来帮我们解析整个html页面,相当于正则表达式的功能 from bs4 import BeautifulSoup 用html解析器对网页进行解析 soup = BeautifulSoup(ret.text, 'html.parser') 我们用**print(type(soup))**输出soup的类型得到: <class 'bs4.BeautifulSoup'> ,可以看出soup由文本变成对象了。 提取出新闻所在的div: div = soup.find(name='div',id='auto-channel-lazyload-article') 我们先**print(div)**查看下结果: ![1353628-20180622164936262-204157228.png][] 然后再对这个div对象进行二次解析,我们最终要拿到里面的li,用find\_all找所有的li li_list = div.find_all(name='li') 再次**print(li\_list)**输出: ![1353628-20180622165514536-1926218896.png][] 可以看出li\_list已经是一个列表了。我们需要先找出里面的h3标签 for li in li_list: h3 = li.find(name='h3') 用**print(h3)**查看下h3标签 ![1353628-20180622170145871-2116128319.png][] 可以看出上图有一个为None的地方,我们返回网页查看源码 ![1353628-20180622170626688-1051318184.png][] 目测这里应该是一个广告位,这里我们可以采取if判断直接过滤掉 for li in li_list: h3 = li.find(name='h3') if not h3: continue print(h3) 在这里h3是一个对象,我们最终需要得到h3的文本 print(h3.text) 目前我们只是取得了每个li标签的新闻标题,再获取新闻正文和超链接 for li in li_list: h3 = li.find(name='h3') if not h3: continue print(h3.text) p = li.find(name='p') print(p.text) a = li.find('a') # 不写name默认取第一个a print(a.attrs) # attrs拿取所有属性 ![1353628-20180622172418764-384052702.png][] 对输出进行优化: print(h3.text, a.get('href')) print(p.text) print('\n') ![1353628-20180622173008105-815442535.png][] 我们顺便爬下图片吧 img = li.find('img') # print(img) src = img.get('src') # print(src) file_name = src.rsplit('__', maxsplit=1)[1] # print(file_name) ret_img = requests.get( url='https:' + src ) with open(file_name, 'wb') as f: f.write(ret_img.content) print('\n') 此时在自己当前路径下,已经下载了很多图片 ![1353628-20180622174540955-1034876176.png][] 转载于:https://www.cnblogs.com/Black-rainbow/p/9214707.html [1353628-20180622155605737-360016547.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622155605737-360016547.png [1353628-20180622160138650-1876333291.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622160138650-1876333291.png [1353628-20180622161520359-576354091.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622161520359-576354091.png [1353628-20180622161726719-1871105258.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622161726719-1871105258.png [1353628-20180622164936262-204157228.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622164936262-204157228.png [1353628-20180622165514536-1926218896.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622165514536-1926218896.png [1353628-20180622170145871-2116128319.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622170145871-2116128319.png [1353628-20180622170626688-1051318184.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622170626688-1051318184.png [1353628-20180622172418764-384052702.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622172418764-384052702.png [1353628-20180622173008105-815442535.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622173008105-815442535.png [1353628-20180622174540955-1034876176.png]: https://images2018.cnblogs.com/blog/1353628/201806/1353628-20180622174540955-1034876176.png
相关 爬取汽车之家新闻 爬取汽车之家新闻 伪造浏览器向某个地址发送Http请求,获取返回的字符串 response = requests.get(url = '地址' 系统管理员/ 2023年10月09日 11:05/ 0 赞/ 74 阅读
相关 scrapy爬取汽车之家宝马5系图片 需求分析 我们想在汽车之家官网上爬取宝马5系的部分图片,并根据分类保存到本地磁盘欣赏, ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5 ╰半橙微兮°/ 2023年10月08日 09:29/ 0 赞/ 6 阅读
相关 爬取网站新闻 军事新闻爬取 光明网军事新闻 国防科技信息网 光明网军事新闻 import json import redis import 本是古典 何须时尚/ 2022年12月10日 07:06/ 0 赞/ 302 阅读
相关 java爬虫入门--用jsoup爬取汽车之家的新闻 public static boolean isContainChinese(String str) { Pattern p = Patte 客官°小女子只卖身不卖艺/ 2022年06月07日 08:07/ 0 赞/ 219 阅读
相关 python3爬汽车之家 记录一次python3爬汽车之家。 百度上一堆python2写的爬虫,python3的少之又少,而且由于对方网站也在更新,能用的也没有找到,于是动手写一次。 第一部分:问题 绝地灬酷狼/ 2022年04月15日 07:16/ 0 赞/ 271 阅读
相关 爬取全部校园新闻 0.从新闻url获取点击次数,并整理成函数 newsUrl newsId(re.search()) clickUrl(str.format()) re £神魔★判官ぃ/ 2022年01月07日 13:23/ 0 赞/ 460 阅读
相关 爬取全部的校园新闻 1.从新闻url获取新闻详情: 字典,anews ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] 1 - 淩亂°似流年/ 2021年12月21日 08:53/ 0 赞/ 442 阅读
相关 爬取全部的校园新闻 作业要求来自于[https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2941][https_edu.cnblogs. ╰+哭是因爲堅強的太久メ/ 2021年12月21日 01:34/ 0 赞/ 445 阅读
相关 Python3[爬虫实战] scrapy爬取汽车之家全站链接存json文件 昨晚晚上一不小心学习了崔庆才,崔大神的博客,试着尝试一下爬取一个网站的全部内容,福利吧网站现在已经找不到了,然后一不小心逛到了汽车之家 ([http://www.autoho 水深无声/ 2021年06月11日 15:10/ 0 赞/ 625 阅读
还没有评论,来说两句吧...