• 爬虫随笔


    爬虫相关知识点

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    寻找网页中的目标元素

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

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

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

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

    数据清洗

    info = re.sub('
  • |
  • ]*>|
  • '
    , '\n', info) # '\n\n本\xa0月\xa0均\xa0价\n
    \n

    \n12081元/㎡

    \n
    \n\n\n
    \n

    小区均价仅供参考,不可作为交易等依据

    \n
    \n
    \n
    \n\n'
    info = info.strip('\n') # 去掉首位换行符 # '本\xa0月\xa0均\xa0价\n
    \n

    \n12081元/㎡

    \n
    \n\n\n
    \n

    小区均价仅供参考,不可作为交易等依据

    \n
    \n
    \n
    '
    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元/㎡', '小区均价仅供参考,不可作为交易等依据']
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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"]'))
    
    • 1
    • 2

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

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

    反反爬虫

    目前大多网页都具有反爬虫技术,绝大多数是使用检测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'跳转...' in r.text:
            soup = BeautifulSoup(r.text, 'lxml')
            new_url = soup.find(name='a', attrs={'class': 'btn-redir'}).attrs['href']
            return new_url
    
    • 1
    • 2
    • 3
    • 4

    正则表达式

    import re
    re.search()
    re.match()
    
    • 1
    • 2
    • 3

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

  • 相关阅读:
    12. 虚拟机与类加载机制
    视频孪生,打造虚实共生的数字孪生应用
    Springboot 多模块项目集成Jacoco统计单元测试覆盖率
    会议OA项目-其它页面->自定义组件应用,其它界面的布局
    锐捷交换机vlan隔离(wifi段仅能访问外网,和内网隔离)
    5种促进业务增长的软件测试策略,我敢打赌你一定不知道?
    力扣(LeetCode)792. 匹配子序列的单词数(C++)
    建立线上线下一体化营销体系,数字化营销系统必不可少
    Greenplum实用工具-gpfdist
    爱尔眼科角膜塑形镜验配超百万,全力做好“角塑镜把关人”
  • 原文地址:https://blog.csdn.net/weixin_44599604/article/details/126713569