文章目录
- 1. 二手房信息爬取
- 2. 电影信息爬取
- 3. 爬虫与反爬虫
1. 二手房信息爬取
由于网站限制,未做数据持久化
import requests
from bs4 import BeautifulSoup as bs
import time
import random as rd
from tqdm import tqdm
for page in tqdm(range(1,101)):
url = f'https://cd.lianjia.com/ershoufang/pg{page}/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37'}
rsp = requests.get(url=url, headers=headers)
if rsp.status_code == 200:
soup = bs(rsp.text, 'html.parser')
li_list = soup.select('#content > div.leftContent > ul > li')
for i in li_list:
house_href = i.select_one('li > a').attrs['href']
house_rsp = requests.get(url=house_href,headers=headers)
soup1 = bs(house_rsp.text, 'html.parser')
# 小区名
house_name = soup1.select_one('div.communityName > a').text
# 位置
area_name = soup1.select_one('div.areaName > span.info').text
# 补充
suplement = soup1.select_one('div.areaName > a').text
suplement_handle = '暂无数据' if suplement == '' else suplement
# 单价
unit_price = soup1.select_one('span.unitPriceValue').text
# 总价
totle_price = soup1.select_one('div.price >span').text + '万'
# 基本信息
base_info = soup1.select('div.base li')
# 处理信息
base_info_list = [i.text for i in base_info]
# 交易属性
deal_info = soup1.select('div.transaction li > span')
# deal_info_list = [i.text.replace('\n', '') for i in deal_info]
deal_info_list = [i.text.strip() for i in deal_info]
# 休眠:sleep,以秒为单位
# uniform(a,b)从a到b范围内随机取浮点数
# print('----------'*10)
time.sleep(rd.uniform(1, 3))
else:
print(rsp.status_code)
2. 电影信息爬取
# 导入相应的模块
import requests
from bs4 import BeautifulSoup as bs
import openpyxl
# 使用headers进行浏览器伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37'
}
# 创建工作簿对象
wb = openpyxl.Workbook()
wb.create_sheet('电影Top250', 0)
# 写入标题
title = ['电影', '评分', '评分人数', '引用']
for i,t in enumerate(title):
wb['电影Top250'].cell(1, i+1).value = t
# 迭代计数
count = 2
# 遍历10个页面
for i in range(0,251,25):
# 字符串拼接链接
url = 'https://movie.douban.com/top250?start=' + str(i) + '&filter='
# 发送请求,得到结果
rsp = requests.get(url=url, headers=headers)
rsp.encoding = 'UTF-8'
# 判断网页请求是否正常
if rsp.status_code == 200:
soup = bs(rsp.text, 'html.parser')
# 获取列表信息
ol_list = soup.select('#content > div > div.article > ol > li')
# 遍历信息列表
for x in ol_list:
# 提取第一个标题
title_one = x.select_one('li > div > div.info > div.hd > a > span:nth-child(1)').text
# 提取评分
score = x.select_one('li span.rating_num').text
# 提取评分人数
num_people = x.select_one('li > div > div.info > div.bd > div > span:nth-child(4)').text[:-3]
# 提取引用短语
q = x.select_one('li > div > div.info > div.bd > p.quote > span')
# 判断引用短语是否为空,如果为空返回'暂无引用'
if q is not None:
quote = q.text
else:
quote = '暂无引用'
# 将提取数据下乳xlsx文件中
wb['电影Top250'].cell(count, 1).value = title_one
wb['电影Top250'].cell(count, 2).value = score
wb['电影Top250'].cell(count, 3).value = num_people
wb['电影Top250'].cell(count, 4).value = quote
# xlsx文件写入行数迭代
count += 1
else:
# 状态码异常打印
print(rsp.status_code)
# 保存xlsx文件
wb.save('../file/电影Top250.xlsx')
3. 爬虫与反爬虫
反爬虫的几种情况:
- 字体反爬:将页面中重要信息使用符号进行隐藏。例如:猫眼电影、瓜子二手车、大众点评、企查查、美团等。
- 动态页面:—> 使用selenium模块(自动化测试的模块),能够模拟人的行为使用浏览器。
- 人机验证:九宫格选图片验证、选词验证、图片+计算公式验证、字母数字验证、滑块验证、短信验证等
- 九宫格选图片验证:深度学习。https://cuiqingcai.com/36060.html
- 选词验证:深度学习。超级鹰
- 图片+计算公式验证、字母数字验证:光学文字识别。easyocr、百度飞桨、百度AI开发者平台等
- 滑块验证:selenium、pyautgui —> 引入对应的物理原理
- 短信验证:自己的手机号、接码平台
- 封ip:—> 代理ip。极光代理ip、蘑菇代理、站大爷、芝麻代理等。
- 检测selenium:滑块验证无法成功拖动 —> 1. 加入屏蔽selenium的代码 2. 修改selenium驱动的底层代码。例如:淘宝
- 网页中的数据放到图片中:—> 光学文字识别
- 登录验证:—> 可以在requests中传入对应的cookie信息、在selenium中传入cookie、使用selenium操作登录的输入框和按钮
RPA — 机器人流程自动化(影刀、八爪鱼、壁虎、Uiot等)从selenium进行演变
不建议使用