鱼C论坛

 找回密码
 立即注册
查看: 1936|回复: 16

[已解决]爬虫遇到必须使用JavaScript的网站怎么办?

[复制链接]
发表于 2018-10-19 21:00:50 | 显示全部楼层 |阅读模式

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

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

x
我准备爬这个页面上的东西: http://psycnet.apa.org/PsycARTICLES/journal/rev/125/1

然后写了如下代码。

  1. import urllib.request
  2. if __name__ == "__main__":
  3.     header = {}
  4.     header['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
  5.     data = {}
  6.     url = 'http://psycnet.apa.org/PsycARTICLES/journal/rev/125/1'
  7.     req = urllib.request.Request(url, data, header)
  8.     response = urllib.request.urlopen(req)
  9.     print(response.info())
  10.     html = response.read()
  11.     print(html.decode('UTF-8'))
复制代码


但是结果并没有返回页面内容,而是返回了一个报错的页面。我看了下返回的html代码,我猜出错的原因是因为JavaScript, 因为在返回的html代码中有一句 ”The website psycnet.apa.org requires that all visitors be running JavaScript. This page is validating your browser's JavaScript engine and functionality.“

这个问题应该怎么解决呀。鱼友可以帮忙看看吗?
最佳答案
2018-10-20 10:50:46
本帖最后由 wongyusing 于 2018-10-20 10:54 编辑

看了一下,你只需要post一些信息到
  1. url = 'http://psycnet.apa.org/api/request/browsePA.getArticles'
复制代码

就可以获取搜索的结果了。  
但是,据我观察,这个网站的曲奇好像是随时间变化而变化的。  
而且,你在post的所填入的参数有点多
  1. {"api":"browsePA.getArticles","params":{"code":"rev","volume":"125","issue":"1"},"logs":{"eventType":"Journal TOC","pageId":"B_PA_TOC"}}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-20 09:58:36 | 显示全部楼层
或者有人知道爬JavaScript的教程在哪里可以下载吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 10:04:11 | 显示全部楼层
不知道你要爬取什么信息,看看selenium里有没有
  1. from selenium import webdriver
  2. url='http://psycnet.apa.org/PsycARTICLES/journal/rev/125/1'
  3. browser=webdriver.Chrome()
  4. browser.get(url)
  5. print(browser.page_source)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 10:11:40 | 显示全部楼层
好像也不行,我再试试别的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 10:50:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wongyusing 于 2018-10-20 10:54 编辑

看了一下,你只需要post一些信息到
  1. url = 'http://psycnet.apa.org/api/request/browsePA.getArticles'
复制代码

就可以获取搜索的结果了。  
但是,据我观察,这个网站的曲奇好像是随时间变化而变化的。  
而且,你在post的所填入的参数有点多
  1. {"api":"browsePA.getArticles","params":{"code":"rev","volume":"125","issue":"1"},"logs":{"eventType":"Journal TOC","pageId":"B_PA_TOC"}}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-20 11:26:54 | 显示全部楼层
本帖最后由 可爱的小本子 于 2018-10-20 11:37 编辑
wongyusing 发表于 2018-10-20 10:50
看了一下,你只需要post一些信息到

就可以获取搜索的结果了。  


谢谢 wongyusing, 是这样的,我想请问下您提到的这个地址是怎么找到的呢?
  1. url = 'http://psycnet.apa.org/api/request/browsePA.getArticles'
复制代码


我刚刚找了下下面这个页面审查元素里面的network里面并没有出现这个地址呀。请问您是怎么找到上面那个url的呢?
  1. http://psycnet.apa.org/PsycARTICLES/journal/rev/125/1
复制代码


我写这个爬虫其实是想抓取“Psychological Review”这本期刊从2000年到现在所有文章的doi,就是类似“http://dx.doi.org/10.1037/rev0000128”这样的东西。但是返回的那个html代码一直有错,所以一直没有成功。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-20 11:28:02 | 显示全部楼层
塔利班 发表于 2018-10-20 10:11
好像也不行,我再试试别的

好的,谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 11:29:12 | 显示全部楼层
没事,爬虫方面咱们差不多,一起学习,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 11:37:20 | 显示全部楼层
本帖最后由 wongyusing 于 2018-10-20 16:56 编辑
可爱的小本子 发表于 2018-10-20 11:26
谢谢 wongyusing, 是这样的,我想请问下这个地址是怎么找到的呢?


你应该只是观察到doc的文件吧。  
大多数情况下,我们爬取动态网站的话。
在network中
除了看doc以外,还要看xhr里的文件。  
通常xhr里面会有json文件的。  

然后随便复制一个内容的标题。  
到里面搜索一下,就找到了。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 11:39:05 | 显示全部楼层
我的回复又要被审核了,不知道,有触碰了什么关键字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-20 11:42:33 | 显示全部楼层
wongyusing 发表于 2018-10-20 11:39
我的回复又要被审核了,不知道,有触碰了什么关键字。

没事没事,我等等就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 13:27:25 | 显示全部楼层
给张图你吧,你只需要注意一点,大多数动态网站的数据在XHR和DOC这两个文件类型中。  
当然也有例外,这个就不讨论了。 2018-10-20 13-23-19 的屏幕截图.png
你应该只看了DOC没看XHR。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 17:08:23 | 显示全部楼层
审核了半天,终于出来了,到底是什么关键字导致审核的?? @小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-21 18:54:38 | 显示全部楼层
wongyusing 发表于 2018-10-20 13:27
给张图你吧,你只需要注意一点,大多数动态网站的数据在XHR和DOC这两个文件类型中。  
当然也有例外,这个 ...

对的,我没有看XHR,因为才开始学习爬虫,学习了,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-26 14:42:05 | 显示全部楼层
wongyusing 发表于 2018-10-20 17:08
审核了半天,终于出来了,到底是什么关键字导致审核的?? @小甲鱼

@ wongyusing, 前两天没什么时间,今天试了下post data到那个网址,但是遇到了一些新的问题,请问可以再麻烦你帮忙看看吗?

我post data的代码如下:
  1. import requests
  2. header = {
  3.     'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
  4. }
  5. data = {
  6.     "api": "browsePA.getArticles",
  7.     "params": {"code": "rev",
  8.                 "volume": "125",
  9.                 "issue": "5"},
  10.     "logs":{"eventType": "Journal TOC",
  11.             "pageId":"B_PA_TOC"}
  12. }
  13. response = requests.post("http://psycnet.apa.org/api/request/browsePA.getArticles", data = data, headers = header)
  14. print(response.content.decode("utf-8"))
复制代码


现在主要有两个问题:
1. 提交了这个post之后还是不能拿到doi,但是看到了结果中有出现“DOI”这个字符在"responseHeader"中,这个是需要进行二次提交还是其他的操作吗?
2. 打印出来的结果很乱,没有打印成那种比较好的html结构,请问可以有什么方法让它变得更易读吗?
打印的结果如下:
  1. {"response":{"search":"http://marklogic.com/appservices/search","xsi":"http://www.w3.org/2001/XMLSchema-instance","xh":"http://www.w3.or
  2. g/1999/xhtml","responseHeader":{"status":"0","QTime":"0.051532","params":{"service":"psycinfo","function":"/query/facet","sort":"PageSor
  3. t","fl":"UID,ChorusReleaseDate,ProductCode,GivenDocumentTitle,TransDocumentTitle,AuthorOrig,MonthSeason,PublicationYear,XMLLink,PDFLink,
  4. PAFirstPage,Pagination,PAVolume,PAIssue,PAIssueCode,PAPageSuffix,IsOFP,PAJournalCode,PIJournalTitle,PIReleaseDate,DOI,SFXOpenURL,Special

  5. SectionTitle,SpecialSectionEditors,PICorrectionDate,FTCorrectionDate,HasOpenAccess,HasAbstract,HasFullText,SerialSubTitle,ContributorLis
  6. t,HasImpactStatement,HasCitations,CitedByCount","start":"0","rows":"10000","format":"json","debug":"false","results":"true","facet":"fal
  7. se","facet.prefix":"*","facet.offset":"0","facet.limit":"11","query":"false","hl":"false","child":"false","total":"0","boosting":"false"
  8. ,"w_title":"10","w_year":"3","w_keywords":"6","w_abstract":"1","w_first_post":"2.5"}},"result":{"start":"1","rows":"10000","numFound":"0
  9. "},"debug":""}}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-26 17:22:49 | 显示全部楼层
这个网站,反爬很厉害。  
讲真,我看你这个问题的时候,我一个字母都没敲。  
我只是分析了一下。  
这个网站在曲奇哪里还有一个参数是随时间变化而变化的。  
应该是曲奇参数哪里的问题。
曲奇自己翻译成英语,发英语会被审核  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 01:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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