Python爬虫的出现,为我们获取目标网站的数据提供了一种高效的方式。本文将从网页请求、网页解析、反爬策略和数据存储四个方面,对Python爬取代码进行全面解析。
一、网页请求
1、requests库的使用:requests是Python中常用的HTTP库,可以用来发送HTTP/1.1请求。以下是一个简单的requests请求。
import requests
res = requests.get('http://www.baidu.com/')
print(res.status_code)
print(res.text)
2、使用代理:有些网站会有反爬策略,为了避免被封IP,我们可以使用代理。以下是一个使用代理的例子。
import requests
proxies = {
"http": "http://127.0.0.1:8888",
"https": "https://127.0.0.1:8888"
}
res = requests.get('http://www.baidu.com/', proxies=proxies)
print(res.status_code)
print(res.text)
二、网页解析
1、BeautifulSoup库的使用:BeautifulSoup是Python常用的HTML与XML解析库,它可以将HTML或XML文档转换成一棵树形结构,并提供了查找、遍历、修改数节点的功能。以下是一个使用BeautifulSoup解析HTML的示例。
from bs4 import BeautifulSoup
import requests
res = requests.get('http://www.baidu.com/')
soup = BeautifulSoup(res.text, 'html.parser')
print(soup.title.string)
2、XPath语法解析:XPath是一种在XML文档中查找信息的语言,它可以用来从XML文档中选取数据。以下是一个使用XPath解析HTML的示例。
from lxml import html
import requests
res = requests.get('http://www.baidu.com/')
dom = html.fromstring(res.text)
print(dom.xpath('//title')[0].text)
三、反爬策略
1、模拟浏览器请求:有些网站会检测用户请求中的User-Agent,如果User-Agent为Python的请求,则返回空数据或者验证失败。我们可以使用Fake User Agent库来模拟浏览器请求,从而通过反爬。
from fake_useragent import UserAgent
import requests
ua = UserAgent()
header = {'User-Agent':str(ua.chrome)}
res = requests.get('http://www.baidu.com/', headers=header)
print(res.status_code)
print(res.text)
2、Cookies处理:有些网站必须通过登录才能获取数据,我们可以使用登录后的Cookies来获取需要的数据。以下是一个使用网易云音乐Cookies获取数据示例。
import requests
cookies = {
'JSESSIONID-WYYY': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'_iuqxldmzr_': 'xxxxxxxx',
'_ntes_nnid': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'__utmc': 'xxxxxxxx',
'__utmz': 'xxxxxxxx',
'__utma': 'xxxxxxxx',
'usertrack': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
url = 'http://music.163.com/m/discover/toplist?id=3778678'
res = requests.get(url, cookies=cookies)
print(res.status_code)
print(res.text)
四、数据存储
1、存储到文件中:我们可以将爬取到的数据存储到本地文件中,方便以后的调用。以下是一个将数据存储到文本文件中的示例。
import requests
res = requests.get('http://www.baidu.com/')
with open('baidu.html', 'w', encoding='utf-8') as f:
f.write(res.text)
2、存储到数据库:我们还可以将数据存储到数据库中,方便进行后续的分析和利用。以下是一个将数据存储到MySQL中的示例。
import pymysql
import requests
res = requests.get('http://www.baidu.com/')
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='test', charset='utf8')
cursor = conn.cursor()
sql = "INSERT INTO `table`(`data`) VALUES (%s)"
cursor.execute(sql,(res.text))
cursor.close()
conn.commit()
conn.close()
总结
Python爬取代码是Python爬虫中不可避免的一部分,从网页请求、网页解析、反爬策略和数据存储四个方面进行学习,能够帮助我们更好地应对各种复杂的爬取场景。在实践中需要根据具体情况选择不同的方法,并做好反爬策略和数据存储。希望本文能对大家有所帮助。