Python爬虫【八】动态网页爬虫4-爬虫实战
1、编程思维
(1)问题分解:把现实生活中的复杂问题,逐步拆分成容易解决的小问题;
(2)模式识别:根据已有的知识和经验,找出新问题和以前解决过的问题的相似性;
(3)抽象思维:将问题里涉及的数据抽象到数据结构(变量、列表、字典等),把数据处理过程可重复执行部分抽象成函数;
(4)算法设计:根据前三步的分析成果,设计步骤,写出算法,从而解决问题。
2、实战:自动发微博
发微博–登录微博、发送微博,用面向对象的方法重构代码
import requests
class WeiboCrawler:
def __init__(self):
self.session = requests.Session()
self.headers = {
'user-agent': '...',
'referer': 'https://passport.weibo.cn/signin/login?...',
'cookie': '...'
}
self.session.headers.update(self.headers)
# 登录微博
def login(self):
login_data = {
'savestate': '1',
'r': 'https://m.weibo.cn/',
'ec': '0',
'pagerefer': 'https://m.weibo.cn/',
'entry': 'mweibo',
'wentry': '',
'loginfrom': '',
'client_id': '',
'code': '',
'qq': '',
'mainpageflag': '1',
'hff': '',
'hfp': '',
}
self.session.post('https://passport.weibo.cn/sso/login', data=login_data)
# 获取st
def get_st(self):
config_req = self.session.get('https://m.weibo.cn/api/config')
config = config_req.json()
st = config['data']['st']
return st
# 编写微博
def compose(self, content):
compose_data = {
'content': content,
'st': self.get_st()
}
compose_req = self.session.post('https://m.weibo.cn/api/statuses/update', data=compose_data)
print(compose_req.json())
# 发送微博
def send(self, content):
self.login()
self.compose(content)
weibo = WeiboCrawler()
weibo.send('本条微博由 Python 发送')
3、爬虫注意点
user-agent
的请求头一定要加- 有些网站会根据
referer
来反爬虫 - 遇到问题要分析请求、找出原因
- 不同请求的referer可能不一样 遇到令牌(
token
)之类的校验,可以在网页源代码或请求中寻找