【爬虫】爬取百度首页的title数据
爬虫添加了异常处理、编码检测、服务器错误重新连接、动态UA和使用代理IP的功能,已经具备了很强的鲁班性
这些功能满足大多数要求,一般情况下,不会用到所有的功能,具体还要看自己的需求和网站特性
并不是每次写代码都需要写这么多代码,异常处理、编码检测、服务器错误重新连接、动态UA和使用代理IP的功能你可以复制粘贴就行了,最重要的是对网页内容进行解析,提取和存储等操作
import re
import time
import chardet
import requests
import urllib.robotparser
from fake_useragent import UserAgent
# 获取headers
def get_headers():
ua = UserAgent()
user_agent = ua.random
headers = {'User-Agent': user_agent}
return headers
# 这里获取代理ip的函数直接给出了proxies,
# 我们也可以用此函数去爬免费的代理ip,因为不是重点,这里不再赘述
def get_proxies():
proxies = {
"http": "171.35.147.205:9999",
"http": "110.243.8.14:9999",
"http": "120.83.111.118:9999"
}
return proxies
# robots.txt 检测
def robot_check(robotstxt_url, headers, url):
rp = urllib.robotparser.RobotFileParser()
rp = set_url(robotstxt_url)
rp.read()
result = rp.can_fetch(headers['User-Agent'], url)
return result
# 获取网页数据,这里没有返回data.text,
# 因为抓取图片图片时返回的应该是data.content
def get_data(url, num_retries=3, proxies=None):
try:
data = requests.get(url, timeout=5, headers=None)
print(data.status_code)
except requests.exceptions.ConnectionError as e:
print("请求错误, url:", url)
print("错误详细:", e)
data = None
except: # other error
print("未知错误,url:", url)
data = None
if (data != None) and (500 <= data.status_code < 600):
if (num_retries > 0):
print("服务器错误,正在重试。。。")
time.sleep(1)
num_retries -= 1
get_data(url, num_retries, proxies=proxies)
return data
# 对网页内容进行解析,提取和存储等操作
def parse_data(data):
if data == None:
return None
charset = chardet.detect(data.content)
data.encoding = charset['encoding']
html_text = data.text
'''
对网页数据进行解析提取等操作,假设这里要获取网页的title
'''
interesting_data = re.findall('<title>(.*?)</title>', html_text)
return interesting_data
if __name__ == '__main__':
headers = get_headers()
proxies = get_proxies()
data = get_data("http://www.baidu.com", num_retries=3, proxies=proxies)
interesting_data = parse_data(data)
print(interesting_data)
200 ['百度一下,你就知道']
作者:不懂就问薛定谔的猫
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!

浙公网安备 33010602011771号