angelb 发表于 2022-2-5 01:37

针对一个百度热搜榜单的数据爬取

根据这位朋友的帖子学到的https://www.52pojie.cn/forum.php?mod=viewthread&tid=1582275&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline

直接上代码把
from xml import etree
import time,json
import requests
from lxml import etree
def dingtalk_warning(message):
    webhook = "https://oapi.dingtalk.com/robot/send?access_token=你自己的钉钉" # 或者微信公众号等等自己百度即可
    headers = {'Content-Type': 'application/json'}
    data = {
      "msgtype": "text",
      "text": {
            "content": message,
      },
    }
    x = requests.post(url=webhook, data=json.dumps(data), headers=headers)
    print(x.content.decode())
    if x.json()["errcode"] == 0:
      return True
    else:
      return False
def heat():
    url = "百度热搜"
    header = {
      "Referer": "https://www.baidu.com/",
      "sec-ch-ua-platform" : "Windows",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
    }
    req = requests.get(url,headers=header).text
    # req.encoding = "utf-8"
    xl = etree.HTML(req)
    content = '//*[@id="hotsearch-content-wrapper"]/li '
    req_ifon = xl.xpath(content)
# 这是一个大坑爬取的数据他是有问题 不是按照 123456他是14这样的自己定音一个方法
    asd =
    sum = []
    for i,j in zip(req_ifon,asd):
      time.sleep(1)
      webzgu = i.xpath('./a/span/text()')
      re = i.xpath('./span/text()')
# 这个地方是解决那个热字的代码
      # if not re:
      #   print(j , webzgu)
      # else:
      #   print(j , webzgu , re)
      print(webzgu)
      sum.append(" "+str(j) + " " + webzgu + "\n")
      # return sum
    # print(sum
这是给他排序的
    sum.sort()
    dingtalk_warning("报警平台\n%s" % (("").join(sum)))



if __name__ == '__main__':
    heat()



顺便请教大家几个问题
上面代码有个问题自己解决不了
就是有的有热搜 带了那个热字
不知道怎么把他放进去有的带 有的不带



以后都是根据上面哪位童鞋的帖子学到的

angelb 发表于 2022-2-6 13:54

angelb 发表于 2022-2-6 13:39
可以是可以 我想到了一个办法   给他加个空就好了
我测试可以 能放进去 没有的给空急好 这样就能满 ...

    for i,j in zip(req_ifon,asd):
      time.sleep(1)
      webzgu = i.xpath('./a/span/text()')
      re = i.xpath('./span/text()')
      if not re:
            # print(j , webzgu)
            sum.append(" "+str(j) + " " + webzgu + " " + "\n")
      else:
            sum.append(" "+str(j) + " " + webzgu + " %s"%(re) + "\n")
    sum.sort()
    print(("").join(sum))
# 可以看下这个案例

pangdundun 发表于 2022-2-6 12:01

“热”字干脆全去掉如何,往里面推个js语句如下

let tags = document.evaluate("//div", document);
let elements = [];
while (true) {
    let tag = tags.iterateNext();
    if (tag) {
      elements.push(tag);
    } else {
      break;
    }
}
for (ele of elements) {
    ele.remove();
}

zm55555 发表于 2022-2-5 09:44

好东东,谢谢分享!

sunnyboyqiqi 发表于 2022-2-5 10:00

{:1_921:}

飘浮 发表于 2022-2-5 10:01

一会测试下。。

Loobrey 发表于 2022-2-5 10:21

感谢分享!

dmxayjn 发表于 2022-2-5 11:19

太棒了。。收藏了。。是个好东西啊。

wqs0987 发表于 2022-2-5 11:51

感谢大佬的无私分享

adf28 发表于 2022-2-5 16:23

感谢分享

heng179 发表于 2022-2-5 18:01

fireflyfly 发表于 2022-2-5 20:04

谢谢分享
页: [1] 2
查看完整版本: 针对一个百度热搜榜单的数据爬取