记第一次写出自己的简单python爬虫:GCZW3
2018-03-11 21:17
543 查看
经过差不多一个星期的折腾,当然这其中也有做很多其他事情。周四写出来直接通过浏览器Network找到观察者网评论链接进行的爬虫,今天下午有折腾了差不多一下午,终于通过BeautifulSoup解析出的html中找到了data-id,也就是构造评论链接的关键。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/21/2137e955c0527c025dacaa588c83f44c)
找到了data-id之后,这样就可以把每篇文章和其评论建立联系。这样接下来的通过文章链接,直接爬评论的想法就可以水到渠成了。而下午的主要时间都花费在怎么data-id解析提取出来。尝试了很多方法,比如先找到 class = gc-comment 的div 标签,这时候得到是list类型,然后将list类型转变为string类型,可是这期间总是出错,解决这个问题的关键在于 确定 变量的数据类型,不同的数据类型处理方法不同!
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/21/0b570132a1e8971cb2b8451cb295c94c)
gc_comment = soup.select('div.gc-comment')#[<div class="gc-comment" data-from="cms" data-id="355103" data-type="1" id="comments-container">]最后发现把得到的gc_comment是list类型,并且令str = gc_comment[0]后,str并不是我认为的string类型,通过print(type(str))得知str是<class 'bs4.element.Tag'>,也就是说str是bs4类型,想要得到data-id中的数据,必须采用bs4提取数据的方法!因此用str.attrs['data-id'],得到data-id的值。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/21/01a7c225f06a234b6b181344d7fe912a)
到这里,接下来的程序就很好写了,没过多久,一个带有三个函数的程序就被我编写出来了。这还是自己第一次亲自编出python爬虫,虽然功能很简单,但这也是对我近期python学习的一个总结和肯定。这次花费很多时间在提取data-id上,说明对python最简单的基础知识还没有掌握,接下来要着重掌握。
最后贴出观察者网热评python源代码:#!/user/bin/env python
# -*- coding:utf-8 -*-
# author :Guoz time:2018/3/11
import requests
from bs4 import BeautifulSoup
import json
import re
import urllib
from urllib import request
def get_TitleandDataid(url):
try:
# kv = {'wd':keyword}
r = requests.get(url)
#print(r.request.url)
r.raise_for_status()
r.encoding = r.apparent_encoding
#print(r.status_code)
# print(r.text)
#print(len(r.text))
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
articleTitle = soup.title.text
gc_comment = soup.select('div.gc-comment') # 用soup.select找到data-id所在的div
#print(articleTitle.text)
str = gc_comment[0]
#print(str.attrs['data-id']) # 在对数据进行提取时 关键是找到明确数据的类型,不同的类型,操作方式不同
data_id = str.attrs['data-id']
print(articleTitle)
except:
print("标题和Data-id爬取失败!")
return data_id
return articleTitle
def get_cmtsUrl(data_id):
cmtsUrl = ('http://user.guancha.cn/comment/cmt-list.json?codeId='+data_id+'&codeType=1&pageNo=1&order=1&ff=www')
return cmtsUrl
def get_hotcmts(cmtsUrl):
try:
with request.urlopen(cmtsUrl, timeout=10) as response:
content = response.read()
except Exception as e:
content = None
print('crawl data exception.' + str(e))
allContent = json.loads(content)['hots']
i = 0
for item in allContent:
i = i + 1
print('热评NO.%s:\n' % (i))
print(item['content'] + '\n')
print('反对:%s 支持:%s' % (item['tread_num'], item['praise_num']))
print('------' * 30 + '\n')
def main(url):
data_id = get_TitleandDataid(url)
#print(data_id)
cmtsUrl = get_cmtsUrl(data_id)
#print(cmtsUrl)
hotcmts = get_hotcmts(cmtsUrl)
print(hotcmts)
url = ("http://www.guancha.cn/kegongliliang/2018_03_05_448905.shtml")
main(url)
找到了data-id之后,这样就可以把每篇文章和其评论建立联系。这样接下来的通过文章链接,直接爬评论的想法就可以水到渠成了。而下午的主要时间都花费在怎么data-id解析提取出来。尝试了很多方法,比如先找到 class = gc-comment 的div 标签,这时候得到是list类型,然后将list类型转变为string类型,可是这期间总是出错,解决这个问题的关键在于 确定 变量的数据类型,不同的数据类型处理方法不同!
gc_comment = soup.select('div.gc-comment')#[<div class="gc-comment" data-from="cms" data-id="355103" data-type="1" id="comments-container">]最后发现把得到的gc_comment是list类型,并且令str = gc_comment[0]后,str并不是我认为的string类型,通过print(type(str))得知str是<class 'bs4.element.Tag'>,也就是说str是bs4类型,想要得到data-id中的数据,必须采用bs4提取数据的方法!因此用str.attrs['data-id'],得到data-id的值。
到这里,接下来的程序就很好写了,没过多久,一个带有三个函数的程序就被我编写出来了。这还是自己第一次亲自编出python爬虫,虽然功能很简单,但这也是对我近期python学习的一个总结和肯定。这次花费很多时间在提取data-id上,说明对python最简单的基础知识还没有掌握,接下来要着重掌握。
最后贴出观察者网热评python源代码:#!/user/bin/env python
# -*- coding:utf-8 -*-
# author :Guoz time:2018/3/11
import requests
from bs4 import BeautifulSoup
import json
import re
import urllib
from urllib import request
def get_TitleandDataid(url):
try:
# kv = {'wd':keyword}
r = requests.get(url)
#print(r.request.url)
r.raise_for_status()
r.encoding = r.apparent_encoding
#print(r.status_code)
# print(r.text)
#print(len(r.text))
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
articleTitle = soup.title.text
gc_comment = soup.select('div.gc-comment') # 用soup.select找到data-id所在的div
#print(articleTitle.text)
str = gc_comment[0]
#print(str.attrs['data-id']) # 在对数据进行提取时 关键是找到明确数据的类型,不同的类型,操作方式不同
data_id = str.attrs['data-id']
print(articleTitle)
except:
print("标题和Data-id爬取失败!")
return data_id
return articleTitle
def get_cmtsUrl(data_id):
cmtsUrl = ('http://user.guancha.cn/comment/cmt-list.json?codeId='+data_id+'&codeType=1&pageNo=1&order=1&ff=www')
return cmtsUrl
def get_hotcmts(cmtsUrl):
try:
with request.urlopen(cmtsUrl, timeout=10) as response:
content = response.read()
except Exception as e:
content = None
print('crawl data exception.' + str(e))
allContent = json.loads(content)['hots']
i = 0
for item in allContent:
i = i + 1
print('热评NO.%s:\n' % (i))
print(item['content'] + '\n')
print('反对:%s 支持:%s' % (item['tread_num'], item['praise_num']))
print('------' * 30 + '\n')
def main(url):
data_id = get_TitleandDataid(url)
#print(data_id)
cmtsUrl = get_cmtsUrl(data_id)
#print(cmtsUrl)
hotcmts = get_hotcmts(cmtsUrl)
print(hotcmts)
url = ("http://www.guancha.cn/kegongliliang/2018_03_05_448905.shtml")
main(url)
相关文章推荐
- 第一次用python 写的简单爬虫 记录在自己的博客
- python爬虫——写出最简单的网页爬虫
- python爬虫——写出最简单的网页爬虫
- 我的第一次Python爬虫——获取自己博客园的所有文章
- Python简单爬虫爬取自己博客园所有文章
- 学了2天的Python,自己写了个简单的爬虫,可是爬虫有什么用呢?
- Python爬虫简单常用方法
- Python3 对网页进行简单爬虫操作
- 简单 python 爬虫(一)
- Python爬虫实战(十一):两种简单的方法爬取动态网页
- Python实现爬取知乎神回复简单爬虫代码分享
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
- python简单爬虫(二)
- [置顶] python3爬虫爬取网页图片简单示例
- Python采集案例:Python实现爬取知乎神回复简单爬虫代码
- Python爬虫实战入门三:简单的HTML解析——爬取腾讯新闻
- 如何用Python来制作简单的爬虫,爬取到你想要的图片
- python最简单的小爬虫
- Python简单知乎爬虫--爬取页面的图片并下载到本地
- python实现简单爬虫功能