首页 > 编程知识 正文

Python爬取代码全解析

时间:2023-11-21 22:37:48 阅读:293550 作者:HJGQ

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爬虫中不可避免的一部分,从网页请求、网页解析、反爬策略和数据存储四个方面进行学习,能够帮助我们更好地应对各种复杂的爬取场景。在实践中需要根据具体情况选择不同的方法,并做好反爬策略和数据存储。希望本文能对大家有所帮助。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。