爬取链家及汽车之家数据

爬取链家数据

先观察网页源码加载方式,为直接加载

再将需要的数据条件写入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')
View Code

爬取汽车之家新闻数据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'

 

posted @ 2021-09-26 15:24  查无此人cxc  阅读(111)  评论(0)    收藏  举报