怎么爬关于某热点话题的讨论?
1、去哪里爬?微博、知乎、贴吧、论坛、豆瓣等都有讨论,去哪里爬?都爬还是选择性的爬?2、关于这个话题,有用户发表的回答(或帖子、博客),还有评论,还有用视频或图像等传达信息的,要爬什么?
3、这样的话题爬虫该选什么框架爬啊?
我感觉自己被困住了,理不清从哪里开始。 import urllib.request
import re
url = "http://news.baidu.com/"
#header参数是一个字典,将爬虫伪装浏览器用户
header = {
'User-Agent':'User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
}
req = urllib.request.Request(url,headers=header)
#执行请求获取响应信息
res = urllib.request.urlopen(req)
# 从响应对象中读取信息并解码
html = res.read().decode("utf-8")
#使用正则表达式筛选新闻标题信息
pat = '<a href="(.*?)" .*? target="_blank">(.*?)</a>'
#获取字符串html中所有匹配的pat,返回一个data的列表
data = re.findall(pat,html)
#把列表data 遍历输出结果
for v in data:
print(v+":"+v)
微博、知乎、贴吧、论坛、豆瓣这些个网站都爬!我是直接在这个网站直接爬的!
https://tophub.today/ 逗帆云视 发表于 2021-4-18 12:03
import urllib.request
import re
你好,我想问一下,如果我想爬所有论坛(微博、知乎等,还有一些媒体报道)中“五一小长假”这个话题,看看大家都在讨论什么,我该怎么爬呢? mymoon 发表于 2021-4-19 16:05
你好,我想问一下,如果我想爬所有论坛(微博、知乎等,还有一些媒体报道)中“五一小长假”这个话题,看 ...
新浪微博的例子如下
1.初始
这里使用简便式登陆,url = '登录的连接'
2.提交postdata
在IE浏览器中手动输入用户名密码(不点下次自动登陆和安全登陆),分析fiddler,得到最终的登陆结果需,要提交部分
3.后续
在登陆成功后,只要设定query和爬取的页数,循环爬取就可以了,爬到了html文件,用bs解析即可得到包含关键字的微博。找到了页面分分钟爬下来
4
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 08 17:10:36 2016
@author: Administrator
"""
#coding=utf8
from bs4 import BeautifulSoup as bs
import urllib
import urllib2
import cookielib
import base64
import re
import json
import hashlib
import rsa
import binascii
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
pubkey = 'EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443'
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
postdata = {
'entry': 'weibo',
'gateway': '1',
'from': '',
'savestate': '7',
'userticket': '1',
'ssosimplelogin': '1',
'vsnf': '1',
#'vsnval': '',
'su': '',
'service': 'miniblog',
'servertime': '',
'nonce': '',
#'pwencode': 'wsse',
'pwencode': 'rsa2',
'sp': '',
'pagerefer':'http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%252F',
'raskv':'',
'sr':'1440*900',
'prelt':'94',
'encoding': 'UTF-8',
'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'returntype': 'META'
}
def get_servertime():
url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939'
data = urllib2.urlopen(url).read()
p = re.compile('\((.*)\)')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data['servertime'])
nonce = data['nonce']
rsakv=data['rsakv']
return servertime, nonce,rsakv
except:
print 'Get severtime error!'
return None
def get_pwd(pwd, servertime, nonce):
#pwd1 = hashlib.sha1(pwd).hexdigest()#旧的加密方式,pwencode的值需要为wsse
#pwd2 = hashlib.sha1(pwd1).hexdigest()
#pwd3_ = pwd2 + servertime + nonce
#pwd3 = hashlib.sha1(pwd3_).hexdigest()
#return passwd
global pubkey
rsaPublickey = int(pubkey, 16)
key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥
message = str(servertime) + '\t' + str(nonce) + '\n' + str(pwd) #拼接明文js加密文件中得到
passwd = rsa.encrypt(message, key) #加密
passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。
print passwd
return passwd
def get_user(username):
username_ = urllib.quote(username)
username = base64.encodestring(username_)[:-1]
return username
def login():
username = '你的登录邮箱'
pwd = '你的密码'
url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)'
try:
servertime, nonce,rsakv = get_servertime()
except:
return
global postdata
postdata['servertime'] = servertime
postdata['nonce'] = nonce
postdata['rsakv'] = rsakv
postdata['su'] = get_user(username)
postdata['sp'] = get_pwd(pwd, servertime, nonce)
for i in postdata:
print i,":", postdata#可以看提交的哪些数据
# print postdata["su"]
# print postdata["sp"]
postdata = urllib.urlencode(postdata)
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}
req= urllib2.Request(
url = url,
data = postdata,
headers = headers
)
result = urllib2.urlopen(req)
text = result.read()
#print len(text)
#print 30*"*"
#print text
#p = re.compile('location\.replace\(\'(.*?)\'\)')#p = re.compile('location\.replace\(\'(.*?)\'\)')
p = re.compile('location\.replace\(\"(.*?)\"\)')
login_url = p.findall(text)
#login_url = p.search(text).group(1)
print login_url
print 30*"*"
try:
result1 =urllib2.urlopen(login_url).read()
fres = open("fres.txt","w")
fres.write(result1)
fres.close()
# print len(result1)
# print type(result1)
print u"登录成功!"#是否登录成功还要看result1的内容是否是别的什么,
query = "深圳禁摩限电"
page_num = 1
url = "http://s.weibo.com/weibo/{0}&b=1&nodup=1&page={1}".format(query, page_num)
#http://s.weibo.com/weibo/深圳禁摩限电&b=1&nodup=1&page=1
print url.encode("gbk")
#newurl = "http://baike.baidu.com"+suburl
req = urllib2.Request(url)
html = urllib2.urlopen(req).read()
#print html
# html = urllib2.urlopen(url)
# req= urllib2.urlparse()
#soup = bs(html)
f_query1 = open("shenzhenlimitcar_sf.html","w")
f_query1.write(html)
f_query1.close()
except Exception,e:
print 'Login error!'
print e
if __name__=="__main__":
login()
爬标题、链接、摘要,就变成rss阅读器 raelag 发表于 2021-4-20 15:43
爬标题、链接、摘要,就变成rss阅读器
能从网页上爬取多个链接,然后循环访问这些链接,用一种统一的爬虫爬取这些链接里的文本吗?我想爬一个话题的多个网站的新闻报道,不太清楚这可不可行,还是一个链接有一个链接的爬取方式呢? mymoon 发表于 2021-4-20 19:21
能从网页上爬取多个链接,然后循环访问这些链接,用一种统一的爬虫爬取这些链接里的文本吗?我想爬一个话 ...
不同网站的链接结构不一样,同一网站应该一样的。
以网站为单位,先分别爬每个网站进行处理,最后再把结果聚合起来
页:
[1]