python爬虫是指使用Python编写的程序,通过网络爬取信息并提取有效数据。它通过模拟浏览器请求,获取网页数据,并通过解析HTML/XML等文档结构,从中提取数据。
Python爬虫常用的库和工具包括:
- Requests:用于发送HTTP请求和获取网页数据。
- BeautifulSoup:用于解析HTML/XML文档,提取数据。
- Scrapy:基于Twisted框架的爬虫框架,可以快速高效地爬取大规模数据。
- Selenium:用于模拟浏览器操作,处理JavaScript渲染的网页。
- PyQuery:基于jQuery语法的解析库,可以快速方便地提取数据。
Python爬虫可以使用代理IP来解决被封IP的问题,以及提高爬取效率。以下是使用代理IP的Python爬虫案例:
1.使用requests库和代理IP爬取网页内容
import requests
proxy = {
'http': 'http://111.230.132.75:3128',
'https': 'http://111.230.132.75:3128'
}
url = 'https://www.baidu.com'
response = requests.get(url, proxies=proxy)
print(response.content)
2.使用Scrapy和代理IP爬取网页内容
在Scrapy的settings.py文件中设置代理IP:
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
'myproject.middlewares.ProxyMiddleware': 100,
}
在middlewares.py文件中实现代理IP中间件:
import random
class ProxyMiddleware(object):
def process_request(self, request, spider):
proxy = self.get_random_proxy()
request.meta['proxy'] = proxy
def get_random_proxy(self):
proxy_list = [
'http://111.230.132.75:3128',
'http://118.24.172.165:8118',
'http://58.218.92.147:8777',
# ...
]
return random.choice(proxy_list)
3.使用pycurl和代理IP爬取网页内容
import pycurl
proxy = 'http://111.230.132.75:3128'
url = 'http://www.example.com'
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.PROXY, proxy)
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0')
c.setopt(pycurl.FOLLOWLOCATION, True)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.CONNECTTIMEOUT, 30)
c.setopt(pycurl.TIMEOUT, 300)
c.setopt(pycurl.NOPROGRESS, False)
c.setopt(pycurl.FAILONERROR, True)
buf = StringIO()
c.setopt(pycurl.WRITEFUNCTION, buf.write)
c.perform()
print(buf.getvalue())
4.使用Selenium和代理IP爬取网页内容
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
proxy = Proxy({
'proxyType': ProxyType.MANUAL,
'httpProxy': '111.230.132.75:3128',
'ftpProxy': '111.230.132.75:3128',
'sslProxy': '111.230.132.75:3128',
'noProxy': ''
})
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=%s' % proxy.proxy)
driver = webdriver.Chrome(chrome_options=options)
driver.get('http://www.example.com')
print(driver.page_source)
总结
以上是使用代理IP的Python爬虫案例,能够帮助我们更好地爬取网页内容。需要注意的是,在使用代理IP时要选择稳定可靠的代理IP,否则会影响爬取效率。