首先说一下requests+BeautifulSoup对页面的解析安装requests和BeautifulSoup 安装步骤我在这里就不说了
1.通过requests来读取网页信息可以通过状态码来判断是否成功。
这种requests是最基本的,有的网页可能会需要cookie、表单提交登录,还有些网页需要权限的user-agent、通过IP来限制。这些可以在百度上查一下。/wyl-0120/p/10358086.html
2.通过BeautifulSoup来自定义解析网页
soup = BeautifulSoup(response_data.text, "html.parser")
2.1 把用requests读取到的网页文件转化成BeautifulSoup格式
url_list= soup.find_all("a", href=pile('%s' % ())
2.2 通过find_all来查找a标签中href属性包括的标签出来(当然BeautifulSoup还有其他的查找方法,但是本人感觉用的地方不多)
得到的是一个bs4.element.Tag的列表,然后遍历列表。获取每个Tag的其他属性
r = re.findall(r">(.*?)", responseData.text, re.S)
也可以通过这种根据前后标记来获取数据,这种方法相对更灵活一点。有这两种,基本上页面的数据就可以抓取的差不多了
但是有些网站的为了防止爬虫。做了一些JavaScript脚本代码。就是说,你加载页面时,获取不到页面的html。只有在触发脚本代码事件。才会渲染出真正的html
比如:页面的上一页下一页的操作。如果获取不到下一页的html就没办法抓取这个网站的全部页面。这个时候就需要今天的重头戏了python selenium
2 python selenium
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器
#1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口
browser =webdriver.Chrome()
browser.get(')
在创建浏览器对象时,需要安装浏览器驱动(版本必须和浏览器对应),webdriver.Chrome(path)是有一个参数的,参数就是浏览器驱动路径。(如果把驱动路径放入打path变量中,就可以不写参数了)
元素定位
find_element_by_id() # 通过元素ID定位
find_element_by_name() # 通过元素Name定位
find_element_by_class_name() # 通过类名定位
find_element_by_tag_name() # 通过元素TagName定位
find_element_by_link_text() # 通过文本内容定位
find_element_by_partial_link_text()
find_element_by_xpath() # 通过Xpath语法定位
find_element_by_css_selector() # 通过选择器定位
这些都是获取一个element的,如果想获取多个,加s(eg:find_elements_by_name())
一般用的多的就是find_elements_by_xpath()这个了。
element_all = browser.find_elements_by_xpath('//div//a[contains(@href, "")]')
这个是获取div下的a标签的href属性中包括的全部WebElement,会得到一个WebElement的列表
通过遍历WebElement的列表可以获取符合条件的WebElement,然后通过WebElement的方法,就能获取想要的字段的属性了