简单爬虫问题
请问怎样爬取天眼查的信息,求思路或者代码和注释也行,求助大佬们,葵丘55!! 1、打开天眼查,随便搜索关键词,例如KFC2、URL变成:https://www.tianyancha.com/search?key=KFC
3、到了这步爬取就没问题了吧? 笨鸟学飞 发表于 2021-2-23 14:07
1、打开天眼查,随便搜索关键词,例如KFC
2、URL变成:https://www.tianyancha.com/search?key=KFC
3、到 ...
这个我发现了的,用input函数就可以,我关键是请求后的页面爬取不了
这个不难吧,没爬过,稍微看了一下,网页数据在源代码中(不过未登录状态看不到完整数据)。一步一步请求就行了,先请求搜索页,拿到公司列表信息(每个公司页面的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
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是对的,可是匹配不出来任何东西(上面就是按照就是我写的,请大佬康康) YunGuo 发表于 2021-2-23 15:31
这个不难吧,没爬过,稍微看了一下,网页数据在源代码中(不过未登录状态看不到完整数据)。一步一步请求就 ...
但是我发现有些时候xpath是对的,可是匹配不出来任何东西 本帖最后由 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) YunGuo 发表于 2021-2-23 19:47
就是xpath语法错了,给你修改后,你运行看看。
感谢大佬{:5_92:}
页:
[1]