爬取链家数据
先观察网页源码加载方式,为直接加载
再将需要的数据条件写入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\'