'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,\*/\*;q=0.8',
'Referer': 'http://write.blog.csdn.net/postlist/6788536/0/enabled/2',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
}
有关请求头的获取,可使用浏览器自带的“开发者工具获取”或利用Fiddler工具,有关Fiddler的详细使用参见博文《[Fiddler(一) - Fiddler简介](https://bbs.csdn.net/topics/618166371)》、《[Fiddler(二) - 使用Fiddler做抓包分析](https://bbs.csdn.net/topics/618166371)》、《[Python进阶(三十五)-Fiddler命令行和HTTP断点调试](https://bbs.csdn.net/topics/618166371)》。
使用requests访问网站时语句特别简洁,如下:
#构造请求,访问页面
response = requests.get(myUrl,headers=headers)
其中,response即为访问返回结果。获取到结果之后requests的使用至此结束。然后就是使用bs4进行文档解析了。代码如下:
创建BeautifulSoup对象
response.encoding = ‘utf-8’
soup = BeautifulSoup(response.text, “html.parser”)
下面以获取博客访问信息为例,首先参照网页源码获悉页面元素布局。
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/a7e0510d648d9730f76a7246a529b0fb.png)
bs4解析代码如下:
获取
ul = soup.find(‘ul’, {‘id’: ‘blog_rank’})
获取所有的li
lists = ul.find_all(‘li’)
对每个li标签中的内容进行遍历
for li in lists:
# 找到访问总量
data = li.find(‘span’).string
# print(type(data))
if data is None:
# http://c.csdnimg.cn/jifen/images/xunzhang/jianzhang/blog8.png
src = dict(li.find(‘img’, {‘id’: ‘leveImg’}).attrs)[‘src’]
# 52
# print(src.index(‘blog’))
# print(src[56])
data = src[56]
在获取等级时,需要进行特殊处理。
### 四、模拟登录
在获取粉丝数量时,首先要模拟用户登录。
采用python模拟登录CSDN的时候分为三步走:
1. 获取url=https://passport.csdn.net/account/login;
2. 分析登录信息:从网页中得到username,password和hideen标签隐藏的属性,在CSDN中有三个隐藏标签,lt,execution,\_eventId //注意这三个标签是动态的。同时注意到表单使用post提交方式。
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/370b0ac7f6c74b2958094f965f25f6bc.png)
3. 下面使用post方式实现表单提交操作,代码如下:
import re
import requests
url = “https://passport.csdn.net/account/login”
head = {
“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36”,
}
Username = “***”
PassWord = “***”
s = requests.session()
r = s.get(url,headers=head)
lt_execution_id = re.findall(‘name=“lt” value=“(.*?)”.*\sname=“execution” value=“(.*?)”’, r.text, re.S)
payload = {
“username”: Username,
“password”: PassWord,
“lt” : lt_execution_id[0][0],
“execution” : lt_execution_id[0][1],
“_eventId” : “submit”
}
r2 = s.post(url,headers=head,data=payload)
print(r2.text) #登录成功会返回一段loginapi.js的脚本
print(“*”*100) #分隔符
r3 = s.get(“http://my.csdn.net”,headers=head)
print(r3.text) #成功获取"我的主页"源代码
程序运行结果如下:
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/bfc5de9efd38ba0e56466920bd71bdcf.png)
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/1af88259a9f2c46a152bc357d5596e82.png)
### 五、bs4解析
接下来使用bs4解析出粉丝数量及个人信息。
def craw_csdn(self, response):
# 创建BeautifulSoup对象
response.encoding = ‘utf-8’
soup = BeautifulSoup(response.text, “html.parser”)
# 按照标准的缩进格式的结构输出
# print(soup.prettify())
# 获取body部分
body = soup.body
#
focus = soup.find(‘dd’, class_=‘focus_num’).find(‘a’).string
print(“关注:” + str(focus))
#
fans = soup.find(‘dd’, class_=‘fans_num’).find(‘a’).string
print(“粉丝:” + str(fans))
#
# ***
nick_name = soup.find(‘dt’, class_=‘person-nick-name’).find(‘span’).string
print(“昵称:” + str(nick_name))
#
# 计算机软件 |研究生 |*** |中国-**省-**市 |男 |19**11-11
#
person_detail = soup.find(‘dd’, class_=‘person-detail’).contents
# print(len(person_detail))
len_person_detail = len(person_detail)
pd = []
#代表从0到5,间隔2(不包含5)
for i in range(0,len_person_detail,2):
# print(person_detail[i])
if i == 0:
pd.append(person_detail[i].lstrip(’ \n \t\t’))
else:
pd.append(person_detail[i])
print(“个人信息:” + str(pd))
return int(fans)
爬取结果如下图所示:
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/abb67cdd411341c9d1481ff30fc6e2c0.png)
### 六、总结
以上实现了利用`requests`结合bs4获取博客信息,同时实现了模拟用户登录获取粉丝数量,至于具体采集应用大家就请自行发挥吧。有关`requests`及`bs4`的其他具体应用详见参考资料。
### 七、string查找 && range
#### 7.1 string查找
`python`的`string`对象没有`contains`方法,不用使用`string.contains`的方法判断是否包含子字符串,但是`python`有更简单的方法来替换contains函数。
方法1:使用 `in` 方法实现`contains`的功能:
site = ‘http://www.jb51.net/’
if “jb51” in site:
print(‘site contains jb51’)
输出结果:site contains jb51
### 最后
四轮技术面+一轮hr面结束,学习到了不少,面试也是一个学习检测自己的过程,面试前大概复习了 一周的时间,把以前的代码看了一下,字节跳动比较注重算法,面试前刷了下leetcode和剑指offer, 也刷了些在牛客网上的面经。大概就说这些了,写代码去了~
祝大家都能收获大厂offer~
> **[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**
**篇幅有限,仅展示部分内容**
![](https://img-blog.csdnimg.cn/img_convert/ac0b1c2376da47d727e0dc8a77e76478.png)
![](https://img-blog.csdnimg.cn/img_convert/b871b45fb2e6d5442144c863cbcff965.png)
![](https://img-blog.csdnimg.cn/img_convert/f5c18f4b2878302f1f53a8c393e7eb0d.png)