python 爬虫第五天(反爬措施以及对应措施,动态html页面的处理方法)

mac2024-11-10  9

第五天

反爬措施以及对应措施动态html页面的处理方法 爬取网站的流程: 1.确定网站哪个url是数据的来源 2.简要分析一下网站结构,查看数据一般放在哪里 3.查看是否有分页,解决分页问题 4.发送请求,查看response.text里面是否有我们想要的数据 5.如果有数据,就用相应的提取数据的方法提取数据保存

反爬措施以及对应措施

反爬策略: 1.通过usse_agent客户端标识来判断是否是爬虫 解决办法:封装user_agent请求头 2.通过访问频率来判断 解决办法:设置爬取时间 3.封ip 解决办法:设置代理 4.页面内容无法直接获取数据,页面都是js代码 解决办法:selenium+phantomjs

动态html页面的处理方法

常见的一些页面技术:

js html是页面的骨架,css是页面装饰,js是页面灵魂 jquery jquery是一个js库,可以是js代码更加简化。 ajax web页面的异步请求,是一种技术。

解决方法:selenium+phantomjs

1. selenium:是web自动测试工具,但自身不带浏览器 pantomjs:他是一个无界面的浏览器。所以他可以运行js代码,帮我们拿到页面数据 2.安装: selenium安装 pip install selenium==2.48.0 pantomjs安装 是第三方插件,搜索phantomjs镜像,下载后将exe文件复制,放到运行环境的scrip文件下面(注意:第三方插件都可以放在script文件下) 例子: import requests,time from lxml import etree from selenium import webdriver #https://search.douban.com/book/subject_search?search_text=python&cat=1001&start=30 base_url = 'https://search.douban.com/book/subject_search?search_text=python&cat=1001&start=%s' headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' } driver=webdriver.PhantomJS() #创建一个浏览器驱动 def get_text(text): if text: return text[0] return '' def parse_page(text): html=etree.HTML(text) div_list=html.xpath('//div[@id="root"]/div/div/div/div/div') for div in div_list: item = {} ''' 图书名称 评分 评价数 详情页链接 作者 出版社 价格 出版日期 ''' name=get_text(div.xpath('.//div[@class="title"]/a/text()')) scores=get_text(div.xpath('.//span[@class="rating_nums"]/text()')) comment_num = get_text(div.xpath('.//span[@class="pl"]/text()')) detail_url = get_text(div.xpath('.//div[@class="title"]/a/@href')) if all([name,detail_url]): #两个都为真 item['name'] = name item['scores'] = scores item['comment_num'] = comment_num item['detail_url'] = detail_url print(item) if __name__=="__main__": for i in range(1): driver.get(base_url %(i * 50)) #等待 time.sleep(2) html_str=driver.page_source #获取页面的内容 parse_page(html_str)
最新回复(0)