爬虫随笔

爬虫相关知识点

BeautifulSoup

首先需要一个配置一个headers

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70',
    'cookie': 'global_cookie=br7ityabwlw3ydkkiyftwmxkl2wl7k8q6hz; __utmc=147393320; csrfToken=1Nt6Yg1uytSK4OHW7y6jP5Mo; lastscanpage=0; city=xz; __utma=147393320.1501214221.1662108907.1662120134.1662123033.4; __utmz=147393320.1662123033.4.3.utmcsr=search.fang.com|utmccn=(referral)|utmcmd=referral|utmcct=/; token=c082b197338e478e86b347d00a39f6b9; sfut=B70357F0376DD223100D3F60E3D5DF3151127A3E35991765579C71E8A9011E93FBBF33904732E37DD698B6E5D50A415B7DE54190DFC7B6E1DF5F73C8875A5A0959C2DADBF9E1A2F760BEF968816BB18782DA291CD47821A44AE8F8162D271F466A176E793F4BFD63; g_sourcepage=esf_xq%5Elb_pc; __utmt_t0=1; __utmt_t1=1; __utmt_t2=1; new_loginid=126906171; login_username=fang13939063538; unique_cookie=U_br7ityabwlw3ydkkiyftwmxkl2wl7k8q6hz*86; __utmb=147393320.11.10.1662123033'
}
r = requests.get(url = traget_url , headers = headers)
soup = BeautifulSoup(r.text,'lxml)

寻找网页中的目标元素

  • soup.find
page_url = soup.find(name='div', attrs={'class': 'fanye gray6'})

上面代码就是寻找div标签中class等于fanye gray6的元素,但是find在找到目标后就不会继续寻找

  • soup.find_all
page_url = soup.find_all(name='div', attrs={'class': 'fanye gray6'})
print(page_url[0])

find_all函数是会寻找网页中所有符合该条件的元素,并使用列表存贮下来,如果要读取某一个可以按照列表的方式进行读取

数据清洗

info = re.sub('<li>|<li [^>]*>|</li>', '\n', info)
# '\n\n<span>本\xa0月\xa0均\xa0价</span>\n<div class="clearfix base_p">\n<p class="col_red">\n<b>12081</b>元/㎡</p>\n<div class="item_wen">\n<span class="text_wen" href="javascript:;"></span>\n<!--弹层-->\n<div class="wen_hover">\n<p>小区均价仅供参考,不可作为交易等依据</p>\n</div>\n</div>\n</div>\n\n'

info = info.strip('\n') # 去掉首位换行符
# '<span>本\xa0月\xa0均\xa0价</span>\n<div class="clearfix base_p">\n<p class="col_red">\n<b>12081</b>元/㎡</p>\n<div class="item_wen">\n<span class="text_wen" href="javascript:;"></span>\n<!--弹层-->\n<div class="wen_hover">\n<p>小区均价仅供参考,不可作为交易等依据</p>\n</div>\n</div>\n</div>'

dr_info = re.compile(r'<[^>]+>',re.S) # 去掉标签
get_info= dr_info.sub('',info) # 只包含文字信息,但是
# '本\xa0月\xa0均\xa0价\n\n\n12081元/㎡\n\n\n\n\n小区均价仅供参考,不可作为交易等依据\n\n\n'

result_info =get_info.replace(u'\xa0', '')  # replace 可以对字符串进行替换
# '本月均价\n\n\n12081元/㎡\n\n\n\n\n小区均价仅供参考,不可作为交易等依据\n\n\n'

result_info =result_info.replace(u' ', '')
# '本月均价\n\n\n12081元/㎡\n\n\n\n\n小区均价仅供参考,不可作为交易等依据\n\n\n'

result_info = result_info.splitlines()  # splitlines 可以按照换行符分割字符串
# ['本月均价', '', '', '12081元/㎡', '', '', '', '', '小区均价仅供参考,不可作为交易等依据', '', '']

result_info = [x.strip() for x in result_info if x.strip()!='']
# ['本月均价', '12081元/㎡', '小区均价仅供参考,不可作为交易等依据']

selenium

简单来说selenium是相当于模拟点击网页

在寻找相关元素时推荐使用 find_element_by_xpath

self.driver = webdriver.Chrome(executable_path=r'D:\chromedriver_win32\chromedriver.exe',chrome_options=self.options)
sel = Select(self.driver.find_element_by_xpath('//*[@id="datasetForm:tabView:filesTable:j_id15"]'))

若要模拟点击按钮,则只需要在后面加上click()

self.driver.find_element_by_xpath('//*[@id="datasetForm:tabView:filesTable_head_checkbox"]/span').click()

反反爬虫

目前大多网页都具有反爬虫技术,绝大多数是使用检测IP地址的方式,除了放慢爬取的速度以外,还可以使用IP地址的代理池,就是寻找公开的IP地址或者自己购买多个IP,自己维护一个IP池,在爬取的时候在IP池中随机进行选择IP,这样可以有效的避免IP地址被检测出。

还有一下网页在给用户登录的网页中加入一下后缀

old_url :‘https://ccc.ccc.cc.com/aaaaaaaaa/xxxxxxxxxxx/’
在爬取访问时,其实真是的网页会有一个后缀
new_url: '‘https://ccc.ccc.cc.com/aaaaaaaaa/xxxxxxxxxxx/?rfss=1-a5060e33421d163158-0e’

解决办法就是在request.text中寻找转换的信息,通过if进行判断

if r'<title>跳转...</title>' in r.text:
        soup = BeautifulSoup(r.text, 'lxml')
        new_url = soup.find(name='a', attrs={'class': 'btn-redir'}).attrs['href']
        return new_url

正则表达式

import re
re.search()
re.match()

两个函数都可以使用正则表达式进行匹配
这里推荐一个正则表达式的可视化平台
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

By-Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值