网络爬虫实战训练

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了网络爬虫实战训练脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

网络爬虫实训

  • 爬取豆瓣网特殊情况
  • 爬取链家二手房数据
  • 爬取汽车之家新闻数据

爬取豆瓣网特殊情况

如果经常访问豆瓣时会遇到接种结果

网络爬虫实战训练

 

 这是服务器端将客户端IP封锁造成的后果

方法尝试1:

在官网注册账号后,登录界面,研究登录的地址及携带数据,代码发送请求获取cookie,

结果:

操作系数高,难以找到获取信息

方法尝试2:

使用代理池方法(不推荐)

# 调用模块
import requests
# 配置地址池
PRoxies = {
    'http': '114.99.223.131:8888',
    'http': '119.7.145.201:8080',
    'http': '175.155.142.28:8080'
}

# 发送请求
res = requests.get('https://movie.douban.COM/top250',
                   # 请求头加入user—agent
                   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"
                   },
                   # 获取代理池
                   proxies=proxies
                   )

结果:

没有成功

方法尝试3:

等待,等到豆瓣解封本地IP

缺点:

时间长

 

爬取链家二手房数据

思路

1.查看数据加载方式,
2.查看网络network中的获取信息,得到url、请求头、爬链
3.向网页发送请求,获取各详情页的信息

实操

查看加载方式,确定为直接加载

网络爬虫实战训练

调用模块

import requestsFrom bs4 import BeautifulSoupfrom openpyxl import WorkBook

规律发现

网址:https://sz.lianjia.com/ershoufang/pg2/,‘sz’为城市拼音的首字母,愿意为深圳;‘pg2’控制页码,2为当前页码地址,只通过对这两个参数的修改可以获得不同城市指定量的信息

# 创建地域字典
where_place={'上海':'sh','北京':'bj','深圳':'sz','武汉':'wh'}
# 获取城市名
locale_place=input('哪个城市:')
# 判断字典内是否存在
if locale_place not in where_place:
    print('没有该城市数据')
# 城市存在
else:
    # 获取页数
    page_num=input('要几页:')
    # 发送请求
    res=requests.get('https://%s.lianjia.com/ershoufang/https://cs.lianjia.com/ershoufang/pg%s'%(where_place[locale_place],page_num)) 

需求:

  名称 地址 详细信息 关注人数 发布时间 单价 总价

# 构造对象
wb = Workbook()
# 构造工作簿1
wb1=wb.create_sheet('房子数据',0)
# 先定义表头
wb1.apPEnd(['房屋名称','小区名称','区域名称','详细信息','关注人数','发布时间', '总价', '单价'])
# 创建地域字典
where_place={'上海':'sh','北京':'bj','深圳':'sz','武汉':'wh'}
# 获取城市名
locale_place=input('哪个城市:')
# 判断字典内是否存在
if locale_place not in where_place:
    print('没有该城市数据')
# 城市存在
else:
    # 获取页数
    page_num=input('要几页:')
    # 发送请求
    res=requests.get('https://%s.lianjia.com/ershoufang/https://cs.lianjia.com/ershoufang/pg%s'%(where_place[locale_place],page_num))
    # 构造对象
    soup =BeautifulSoup(res.text,'lxml')
    # 获取指定li标签信息
    li_list=soup.select('ul.sellListContent>li')
    # 循环获取单个li标签
    for li in li_list:
        # 有些li标签内部是广告不是地址信息
        try:
            # 获取名字
            tITle=li.select('div.title>a')[0].text
        # 无法获取的情况下
        except Exception as f:
            # 继续
            continue
        # 获取地址
        address=li.select('div.positionInfo')[0].text
        # 进行地址分割
        real_add =address.split('-')
        # 因为有一些地址格式不统一所以要进行不同的处理
        if len(real_add) ==2:
            # 解压赋值
            add_name,add_loc=real_add
        # 格式不同的情况下
        else:
            # 链式赋值结果都相同
            add_name=add_loc=real_add
        # 获取详细信息
        house_detail=li.select('div.houseinfo')[0].text
        # 获取时间,但是时间的文本需要分割
        people_num,publish_time = li.select('div.followInfo')[0].text.split('/')
        # 获取总价
        all_price=li.select('div.totalPrice')[0].text
        # 获取单价
        one_price=li.select('div.unitPrice')[0].text

信息储存方式:

  excel表格存储

        # 写入表格
        wb1.append([title,add_name,add_loc,house_detail,people_num,all_price,one_price])
# 保存文件
wb=(r'房子数据.xlsx')    

结果

网络爬虫实战训练

 

 

爬取汽车之家新闻数据

思想

1.查看数据加载方式,
2.查看网络network中的获取信息,得到url、请求头、防爬链
3.向网页发送请求,获取各详情页的信息

实操

发现数据加载方式为直接加载

网络爬虫实战训练

 

 调用模块

# 调用模块
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook

需求分析:

  新闻标题 新闻链接 新闻图标 发布时间 新闻简介

# 构造文件对象
wb=Workbook()
# 构造工作簿
wb1=wb.create_sheet('汽车')
# 创建表头
wb1.append(['标题','链接','图标链接','发布时间','新闻简介'])

发请求获取数据

# 发送请求,需要请求头
res = requests.get('https://www.autohome.com.cn/news/',
                   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"
                   }
                   )
print(res.text)

网络爬虫实战训练

 

获取结果有乱码,我们查看字符编码时发现,程序使用GBK编码,所以要改变字符编码

res.encoding='gbk'

进行编码

# 字符编码
res.encoding='gbk'

获取数据

# 构造对象
soup = BeautifulSoup(res.text, 'lXMl')
# 查找所有的li标签
li_list=soup.select('ul.article>li')
# 循环获取li标签
for li in li_list:
    # 获取详情链接
    a_tag=li.find('a')
    # 判断标签是否有意义
    if not a_tag:
        # 标签不是所要内容时,结束循环
        continue
    # 获取新闻链接
    link='https:'+a_tag.get('href')
    # 获取标题
    news_title=li.find('h3')
    # 判断标签是否有意义
    if not news_title:
        # 标签不是所要内容时,结束循环
        continue
    # 获取标签
    news_title=news_title.text
    # 获取图片链接
    img_src=li.find('img')
    if not img_src:
        # 标签不是所要内容时,结束循环
        continue
    # 获取图片链接
    news_img=img_src.get('src')
    # 获取发布时间
    news_title_time=li.find('span').text
    # 获取简介
    news_detail=li.find('p').text
    # 获取观看次数
    news_watch=li.find('em').text
    # 获取评论次数
    news_resp=li.find('em',attrs={'data-class':'icon12 icon12-infor'}).text

保存数据

    # 写入数据
    wb1.append([news_title,link,news_img,news_title_time,news_detail,news_watch,news_resp])
# 保存数据
wb.save(r'汽车数据.xlsx')

执行结果

网络爬虫实战训练

返回目录

脚本宝典总结

以上是脚本宝典为你收集整理的网络爬虫实战训练全部内容,希望文章能够帮你解决网络爬虫实战训练所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。