caly_fast 发表于 2021-2-23 13:24:20

简单爬虫问题

请问怎样爬取天眼查的信息,求思路或者代码和注释也行,求助大佬们,葵丘55!!

笨鸟学飞 发表于 2021-2-23 14:07:10

1、打开天眼查,随便搜索关键词,例如KFC
2、URL变成:https://www.tianyancha.com/search?key=KFC
3、到了这步爬取就没问题了吧?

caly_fast 发表于 2021-2-23 14:44:05

笨鸟学飞 发表于 2021-2-23 14:07
1、打开天眼查,随便搜索关键词,例如KFC
2、URL变成:https://www.tianyancha.com/search?key=KFC
3、到 ...

这个我发现了的,用input函数就可以,我关键是请求后的页面爬取不了

YunGuo 发表于 2021-2-23 15:31:31

这个不难吧,没爬过,稍微看了一下,网页数据在源代码中(不过未登录状态看不到完整数据)。一步一步请求就行了,先请求搜索页,拿到公司列表信息(每个公司页面的url),再请求公司页url,最后获取公司信息,可以按这个思路去爬。
不过这种网站如果请求太频繁应该都会遇到IP反爬,我稍微写了几句代码测试,暂时没遇到反爬。
import requests
from lxml import etree

url = 'https://www.tianyancha.com/search?key=%E8%85%BE%E8%AE%AF'
# 如果翻页,url就是'https://www.tianyancha.com/search/p' + 页码 + '?key=' + 关键词
headers = {'user-agent': 'Mozilla/5.0'}
res = requests.get(url, headers=headers)   #请求搜索页
sel = etree.HTML(res.text)
items = sel.xpath('//*[@class="search-item sv-search-company"]')   # 获取公司列表
for item in items:
    name = item.xpath('string(div/div/div/a)')    #公司名
    url_ = item.xpath('div/div/div/a/@href')   # 公司页url
    res1 = requests.get(url_, headers=headers)   # 请求公司页
    sel1 = etree.HTML(res1.text)
    id_ = sel1.xpath('//*[@id="_container_baseInfo"]/table/tbody/tr/td/text()')# 统一社会信用代码
    print(id_)
    break

caly_fast 发表于 2021-2-23 18:01:28

YunGuo 发表于 2021-2-23 15:31
这个不难吧,没爬过,稍微看了一下,网页数据在源代码中(不过未登录状态看不到完整数据)。一步一步请求就 ...

import requests
from lxml import etree
url='https://www.tianyancha.com/relatedbossorganize?keyBoss=%E8%85%BE%E8%AE%AF'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56'}
page_text=requests.get(url=url,headers=headers).text
response=etree.HTML(page_text)
boss_list=response.xpath('//div[@class="boss-list"]')
print(boss_list)
for boss in boss_list:
    boss_name=boss.xpath('./div/div/a/text()')
    company_name=boss.xpath('./div/div/div/a/@title')
    print(boss_name,company_name)





但是我发现有些时候xpath是对的,可是匹配不出来任何东西(上面就是按照就是我写的,请大佬康康)

caly_fast 发表于 2021-2-23 18:01:58

YunGuo 发表于 2021-2-23 15:31
这个不难吧,没爬过,稍微看了一下,网页数据在源代码中(不过未登录状态看不到完整数据)。一步一步请求就 ...

但是我发现有些时候xpath是对的,可是匹配不出来任何东西

YunGuo 发表于 2021-2-23 19:47:19

本帖最后由 YunGuo 于 2021-2-23 19:50 编辑

caly_fast 发表于 2021-2-23 18:01
但是我发现有些时候xpath是对的,可是匹配不出来任何东西

就是xpath语法错了,给你修改后,你运行看看。
import requests
from lxml import etree
url='https://www.tianyancha.com/relatedbossorganize?keyBoss=%E8%85%BE%E8%AE%AF'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56'}
page_text=requests.get(url=url,headers=headers).text
# print(page_text)
response=etree.HTML(page_text)
boss_list=response.xpath('//*[@class="slider-boss sv-search-company-human"]')   # 就是这一句xpath错了,你后面就拿不到任何数据
# print(boss_list)
for boss in boss_list:
    boss_name=boss.xpath('div/div/a/text()')    # 其实这里和下面的xpath你写的是对的,不过我写代码的习惯是不加'./',结果是一样的
    company_name=boss.xpath('div/div/div/a/@title')
    print(boss_name,company_name)

caly_fast 发表于 2021-2-23 20:32:49

YunGuo 发表于 2021-2-23 19:47
就是xpath语法错了,给你修改后,你运行看看。

感谢大佬{:5_92:}
页: [1]
查看完整版本: 简单爬虫问题