吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1479|回复: 7
收起左侧

[求助] 怎么爬关于某热点话题的讨论?

[复制链接]
mymoon 发表于 2021-4-18 10:58
1、去哪里爬?微博、知乎、贴吧、论坛、豆瓣等都有讨论,去哪里爬?都爬还是选择性的爬?
2、关于这个话题,有用户发表的回答(或帖子、博客),还有评论,还有用视频或图像等传达信息的,要爬什么?
3、这样的话题爬虫该选什么框架爬啊?
我感觉自己被困住了,理不清从哪里开始。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

逗帆云视 发表于 2021-4-18 12:03
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[1]+":"+v[0])

免费评分

参与人数 1热心值 +1 收起 理由
mymoon + 1 谢谢@Thanks!

查看全部评分

Stan_Lee 发表于 2021-4-18 13:25
微博、知乎、贴吧、论坛、豆瓣这些个网站都爬!我是直接在这个网站直接爬的!
https://tophub.today/

免费评分

参与人数 1吾爱币 +1 收起 理由
mymoon + 1 谢谢@Thanks!

查看全部评分

 楼主| mymoon 发表于 2021-4-19 16:05
逗帆云视 发表于 2021-4-18 12:03
import urllib.request
import re

你好,我想问一下,如果我想爬所有论坛(微博、知乎等,还有一些媒体报道)中“五一小长假”这个话题,看看大家都在讨论什么,我该怎么爬呢?
逗帆云视 发表于 2021-4-19 16:25
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)[0]
        
    #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()
raelag 发表于 2021-4-20 15:43
爬标题、链接、摘要,就变成rss阅读器
 楼主| mymoon 发表于 2021-4-20 19:21
raelag 发表于 2021-4-20 15:43
爬标题、链接、摘要,就变成rss阅读器

能从网页上爬取多个链接,然后循环访问这些链接,用一种统一的爬虫爬取这些链接里的文本吗?我想爬一个话题的多个网站的新闻报道,不太清楚这可不可行,还是一个链接有一个链接的爬取方式呢?
raelag 发表于 2021-4-21 15:51
mymoon 发表于 2021-4-20 19:21
能从网页上爬取多个链接,然后循环访问这些链接,用一种统一的爬虫爬取这些链接里的文本吗?我想爬一个话 ...

不同网站的链接结构不一样,同一网站应该一样的。
以网站为单位,先分别爬每个网站进行处理,最后再把结果聚合起来
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-24 14:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表