Python 实现模拟登录和爬取网页时的分布式处理和存储技巧
一、模拟登录
1.使用 requests 模块发送网络请求
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
session = requests.Session()
response = session.get(url, headers=headers)
2.模拟登录
首先需要认识一个概念:cookie。
在我们登录一个网站后,网站会给我们发送一些 cookie,以便区分不同的登录状态。这时我们可以通过 requests 的 session 来保存这些 cookie。
接下来就是利用 requests 模拟登录了。
参考代码:
import re
import requests
url = 'https://www.baidu.com'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
s = requests.Session()
访问登录页面
response = s.get(url)
获取登录所需参数
pattern = re.compile(r'name="token" value="(.*?)"')
match = pattern.search(response.text)
token = match.group(1)
构造登录请求参数
data = {
'username': 'xxx',
'password': 'xxx',
'token': token
}
发送登录请求
s.post(url, data=data, headers=headers)
访问登录后的页面
response = s.get('https://www.baidu.com')
print(response.text)
二、爬取网页时的分布式处理和存储技巧
1.使用多线程或协程提高爬取效率
使用多线程或协程可以同时执行多个爬虫任务,提高爬取效率。
参考代码:
import grequests
urls = ['url1', 'url2', 'url3']
rs = (grequests.get(u) for u in urls)
responses = grequests.map(rs)
for response in responses:
print(response.content.decode('utf-8'))
2.使用 scrapy 框架
Scrapy 是 Python 下一个高效的爬虫框架,可进行进行数据的抓取、网页解析、存储等操作。Scrapy 支持多线程、分布式。
参考代码:
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name = 'myspider'
allowed_domains = ['pidancode.com']
start_urls = ['http://pidancode.com']
rules = (
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
def parse_item(self, response):
print(response.body)
三、存储技巧
在线性爬虫中,我们一般使用文件或数据库等方式存储数据。
1.使用文件存储数据
参考代码:
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('皮蛋编程')
2.使用 pymysql 存储数据
参考代码:
import pymysql
conn = pymysql.connect(
host='localhost',
user='root',
password='password',
database='mydb',
charset='utf8'
)
cursor = conn.cursor()
cursor.execute("INSERT INTO mytable
(name
) VALUES ('皮蛋编程')")
conn.commit()
cursor.close()
conn.close()
以上是 Python 实现模拟登录和爬取网页时的分布式处理和存储技巧的详细介绍和简单代码演示。
相关文章