5e30192115

爬取链家数据

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

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

 

分类:

技术点:

相关文章: