鱼C论坛

 找回密码
 立即注册
查看: 1159|回复: 2

python爬虫二级页面

[复制链接]
发表于 2020-3-29 14:02:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我按照https://zhuanlan.zhihu.com/p/34206711这位老师的方式试图抓取一个网页信息对应链接。
我需要抓取url默认显示十项结果,所以按照这个方法获取的也只有十项。但是页面中有show more,展开后有一百多项,并且展开后url地址也不会改变,所以即使展开了抓取还是只有十项
求助怎么修改一下这个程序或者使我的url能包含所有的展开项然后套用这个程序。url: https://www.nytimes.com/search?dropmab=false&endDate=20190131&query=&sections=Obituaries%7Cnyt%3A%2F%2Fsection%2F91a0dd36-11a8-5a06-9b6e-3a3d2f281894&startDate=20190101&types=article
小白+第一次提问,也不知我说清楚了没…😓# In[1]:
from requests_html import HTMLSession
# In[2]:
session = HTMLSession()
# In[70]:
url = 'https://www.nytimes.com/search?dropmab=false&endDate=20190131&query=&sections=Obituaries%7Cnyt%3A%2F%2Fsection%2F91a0dd36-11a8-5a06-9b6e-3a3d2f281894&startDate=20190101&types=article'
# In[71]:
r = session.get(url)
# In[72]:
print(r.html.text)
# In[73]:
r.html.links
# In[74]:
r.html.absolute_links
# In[75]:
sel = '#site-content > div > div:nth-child(2) > div.css-46b038 > ol > li:nth-child(1) > div > div > div > a'
# In[76]:
results = r.html.find(sel)
# In[77]:
results
# In[78]:
results[0].text
# In[79]:
results[0].absolute_links
# In[80]:
def get_text_link_from_sel(sel):
    mylist = []
    try:
        results = r.html.find(sel)
        for result in results:
            mytext = result.text
            mylink = list(result.absolute_links)[0]
            mylist.append((mytext, mylink))
        return mylist
    except:
        return None
# In[81]:
list(results[0].absolute_links)[0]
# In[82]:
def get_text_link_from_sel(sel):
   mylist = []
   try:
       results = r.html.find(sel)
       for result in results:
           mytext = result.text
           mylink = list(result.absolute_links)[0]
           mylist.append((mytext, mylink))
       return mylist
   except:
       return None
# In[83]:
print(get_text_link_from_sel(sel))
# In[84]:
sel = '#site-content > div > div> div > ol > li > div > div > div > a'
# In[85]:
print(get_text_link_from_sel(sel))
# In[86]:
import pandas as pd
# In[87]:
df = pd.DataFrame(get_text_link_from_sel(sel))
# In[88]:
df
# In[69]:
df.to_csv('output.csv', encoding='gbk', index=False)

Screen Shot 2020-03-28 at 10.49.51 PM.png Screen Shot 2020-03-28 at 10.50.10 PM.png Screen Shot 2020-03-28 at 10.50.19 PM.png Screen Shot 2020-03-28 at 10.50.31 PM.png

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-30 08:24:19 | 显示全部楼层
国外服务器吗   打不开你的目标url
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 10:45:54 | 显示全部楼层
点击加载后,可以注意到向https://samizdat-graphql.nytimes.com/graphql/v2这个地址发送了一个post请求,返回了一个json格式的内容:
  1. {
  2.         "data": {
  3. #省略
  4. }, {
  5.                                         "node": {
  6.                                                 "__typename": "BodegaResult",
  7.                                                 "node": {
  8.                                                         "id": "QXJ0aWNsZTpueXQ6Ly9hcnRpY2xlLzdiOTE1YTM4LTg5N2QtNWQ5Yi1hNWJkLTVkOWQ1YzY2NmUxNA==",
  9.                                                         "__typename": "Article",
  10.                                                         "url": "https://www.nytimes.com/2019/01/28/obituaries/peter-magowan-dead.html",
  11.                                                         "uri": "nyt://article/7b915a38-897d-5d9b-a5bd-5d9d5c666e14",
  12.                                                         "promotionalHeadline": "Peter Magowan, Giants Fan Turned Giants’ Owner, Is Dead at 76",
  13.                                                         "promotionalSummary": "While running Safeway Stores, Mr. Magowan headed a group that bought the team and kept it from moving from San Francisco to Florida.",
  14. #省略
复制代码

可以发现新的内容就在这里面,知道了流程那就只需要向对应的地址发送一个post请求就行了。需要注意,这里post请求发送的内容是payload,也就是一个json格式:
  1. {
  2.         "operationName": "SearchRootQuery",
  3.         "variables": {
  4.                 "first": 10,
  5.                 "sort": "best",
  6.                 "beginDate": "20190101",
  7.                 "endDate": "20190131",
  8.                 "filterQuery": "((section_uri: "nyt://section/91a0dd36-11a8-5a06-9b6e-3a3d2f281894")) AND ((data_type: "article"))",
  9.                 "sectionFacetFilterQuery": "((data_type: "article"))",
  10.                 "typeFacetFilterQuery": "((section_uri: "nyt://section/91a0dd36-11a8-5a06-9b6e-3a3d2f281894"))",
  11.                 "sectionFacetActive": true,
  12.                 "typeFacetActive": true,
  13.                 "cursor": "YXJyYXljb25uZWN0aW9uOjk="
  14.         },
  15.         "extensions": {
  16.                 "persistedQuery": {
  17.                         "version": 1,
  18.                         "sha256Hash": "d632cb222f6a7dd48349d5789975e28fbf7017963fe1ec16fd20fa868b335842"
  19.                 }
  20.         }
  21. }
复制代码

只需要创建一个对应的嵌套集合,然后json.dump成data就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-18 10:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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