爬取链家及汽车之家数据
爬取链家数据
先观察网页源码加载方式,为直接加载
再将需要的数据条件写入excel表格内

通过观察网页源码 需要的数据都在这里

那么接下来就是通过bs4模块筛选数据 通过先整体后局部

我们需要获取ul class='sellListContent'内部的li标签
再通过for循环 循环获取索要的内容

接下来就是根据所需要的内容来对标签进行筛选

再将所有数据写入表格内部

完成
import requests # 导入爬虫模块 from openpyxl import Workbook # 导入openpyxl模块 from bs4 import BeautifulSoup #导入bs4 模块 wb=Workbook() wb1=wb.create_sheet(r'二手房数据',0) wb1.append(['小区名称', '区域板块','房屋简介', '详情链接' , '详细信息', '关注人数', '发布时间', '总价', '单价(万/平方米)']) def hkpage(h): url='https://sh.lianjia.com/ershoufang/hongkou/pg%s'%h res=requests.get(url) #朝网站发送请求 # print(res.text) soup=BeautifulSoup(res.text,'lxml') # 使用bs4解析数据 li_list=soup.select('ul.sellListContent>li')# 找到class=sellListContent的ul标签内部的li标签 for li in li_list: # 对在li_list 的li标签进行for 循环 xq_name=li.select('div.positionInfo>a')[0].text # 获得是个列表,里面有两个元素 第一个元素内部的text包含了小区名 qy_name=li.select('div.positionInfo>a')[1].text # 获得区域名 src=li.select('div.title>a')[0].text # 获得div标签中class=title 内部的a标签,并进行索引取值,取到文本内容而非列表,在通过获取text得到内容 href_list=li.select('div.title>a')[0].get('href') # 获得div标签中class=title 内部的a标签 并进行索引取值获得href的连接 info=li.select('div.houseInfo')[0].text # 获得div标签中class=houseinfo的内部标签文本内容 heat_list=li.select('div.followInfo')[0].text # 获得div标签中class=followinfo的内部标签文本内容 heat=heat_list.split('/')[0] # 将获得的关注人数和发布日期进行切割 以/为分割并取第一个元素 time=heat_list.split('/')[1] #同理 将获的关注人数和发布日期进行切割,以/为分割取第二个元素 total_price=li.select('div.totalPrice')[0].text #获取div标签 class=totalPrice的标签文本内容 unit_price=li.select('div.unitPrice')[0].text #获取div标签 class=unitPrice的标签文本内容 wb1.append([xq_name,qy_name,src,href_list,info,heat,time,total_price,unit_price]) for h in range(1,6): hkpage(h) wb.save(r'二手房数据.xlsx')
爬取汽车之家新闻数据https://www.autohome.com.cn/news/
获取新闻数据
新闻标题 新闻链接 新闻图标 发布时间 新闻简介
第一步 检查网页加载方式,为普通加载虽然也存在下拉滚轮,显示出更多内容,但是是js代码动态加载完成 实际没有请求数据
朝该网址发送请求
该网站添加了防爬措施以及需要指定字符编码

开始解析数据
分析页面得知 需要的内容在class=article的ul标签里面的li标签
对li标签进行循环获取里面的a标签

当获取a标签中的href内容时出现如下错误:

仔细查看标签

这个就是页面干扰项

加上if判断即可,并做拼接获得了新闻链接
按照规律依次寻找出名字,发布时间等并写入xlsx表格

通过观察页面发现第一页和第二页的网址


那么可以定义一个函数,进行%s替换内容并作for循环
完整代码如下:(仅爬取10页)
import requests from bs4 import BeautifulSoup from openpyxl import Workbook wb=Workbook() wb1=wb.create_sheet('汽车新闻',0) wb1.append(['新闻标题', '新闻链接', '新闻图标' ,'发布时间' ,'新闻简介']) def page(n): headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'} res=requests.get('https://www.autohome.com.cn/news/%s/#liststart'%n,headers=headers) res.encoding='gbk' # 通过查看text内容发现需要转码 # print(res.text) soup=BeautifulSoup(res.text,'lxml') # 使用解析器进行解析 li_list=soup.select('ul.article>li') # 获取li标签,在class=article的ul内部li标签 for li in li_list: # 对li标签进行循环获取 a_tag=li.find('a') # 找到a标签 if not a_tag: # 跨过页面干扰项, 如果为none 则继续 continue link=a_tag.get('href') # 获得a标签中的href内容 real_link='http:'+link # 对链接进行拼接,开头加上http h3_tag=li.find('h3') # 找出文章标题,在h3标题中 if not h3_tag: # 跨过页面干扰项,none则继续 continue title=h3_tag.text # 获得h3标签中的文本内容 img=li.find('img').get('src') # 获得li中的img标签地址 time=li.find('span').text # 获得li中的发布时间文本内容 info=li.find('p').text # 获得li中的新闻简介内容 wb1.append([title,real_link,img,time,info]) # 写入表格文件 for n in range(1,10): page(n) wb.save(r'汽车新闻.xlsx'

浙公网安备 33010602011771号