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 requestsproxy = {'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 randomclass ProxyMiddleware(object):def process_request(self, request, spider):proxy = self.get_random_proxy()request.meta['proxy'] = proxydef 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 pycurlproxy = '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, ProxyTypeproxy = 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,否则会影响爬取效率。