python爬虫笔记
一、requests
import requests headers = { 'Cookie': 'q_c1=31653b264a074fc9a57816d1ea93ed8b|1474273938000|1474273938000; d_c0="AGDAs254kAqPTr6NW1U3XTLFzKhMPQ6H_nc=|1474273938"; __utmv=51854390.100-1|2=registration_date=20130902=1^3=entry_date=20130902=1;a_t="2.0AACAfbwdAAAXAAAAso0QWAAAgH28HQAAAGDAs254kAoXAAAAYQJVTQ4FCVgA360us8BAklzLYNEHUd6kmHtRQX5a6hiZxKCynnycerLQ3gIkoJLOCQ==";z_c0=Mi4wQUFDQWZid2RBQUFBWU1DemJuaVFDaGNBQUFCaEFsVk5EZ1VKV0FEZnJTNnp3RUNTWE10ZzBRZFIzcVNZZTFGQmZn|1474887858|64b4d4234a21de774c42c837fe0b672fdb5763b0', 'Host': 'www.zhihu.com', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36', } proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } r = requests.get(url, headers=headers,proxies=proxies) r.status_code r.text r.cookies r.content
二、pyquery
from pyquery import PyQuery as pq import requests doc = pq(requests.get('http://cuiqingcai.com').text) doc('#container .list li') doc('.list').find('li')--子孙 doc('.list').children('.active')--子 doc('.list').parent()--父 doc('.list').parents()--祖先 doc('.list').siblings('.active')--兄弟 --如需遍历 doc('.list').items() doc('.list').attr('href')--提取属性 doc('.list').attr.href
三、Selenium
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait browser = webdriver.Chrome() try: browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'}) browser.get('https://www.baidu.com') input = browser.find_element_by_id('kw') input.send_keys('Python') input.send_keys(Keys.ENTER) wait = WebDriverWait(browser, 10) wait.until(EC.presence_of_element_located((By.ID, 'content_left'))) print(browser.current_url) print(browser.get_cookies()) print(browser.page_source) finally: browser.close()
四、xpath
##引用自https://cuiqingcai.com/5545.html
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
from lxml import etree html = etree.HTML(text) result = html.xpath('//li[@class="item-0"]/text()') result = html.xpath('//li/a/@href') result = html.xpath('//li[contains(@class, "li")]/a/text()') result = html.xpath('//li[contains(@class, "li") and @name="item"]/a/text()') result = html.xpath('//li[1]/a/text()') result = html.xpath('//li[last()]/a/text()') result = html.xpath('//li[position()<3]/a/text()') result = html.xpath('//li[last()-2]/a/text()') result = html.xpath('//li[1]/ancestor::*') 调用了ancestor轴,可以获取所有祖先节点。其后需要跟两个冒号,然后是节点的选择器,这里我们直接使用*,表示匹配所有节点 result = html.xpath('//li[1]/ancestor::div') 得到的结果就只有div这个祖先节点了 result = html.xpath('//li[1]/attribute::*') 可以获取所有属性值,其后跟的选择器还是*,这代表获取节点的所有属性,返回值就是li节点的所有属性值 result = html.xpath('//li[1]/child::a[@href="link1.html"]') 可以获取所有直接子节点。这里我们又加了限定条件,选取href属性为link1.html的a节点 result = html.xpath('//li[1]/descendant::span') 可以获取所有子孙节点。这里我们又加了限定条件获取span节点,所以返回的结果只包含span节点而不包含a节点 result = html.xpath('//li[1]/following::*[2]') 可以获取当前节点之后的所有节点。这里我们虽然使用的是*匹配,但又加了索引选择,所以只获取了第二个后续节点 result = html.xpath('//li[1]/following-sibling::*') 可以获取当前节点之后的所有同级节点。这里我们使用*匹配,所以获取了所有后续同级节点