鱼C论坛

 找回密码
 立即注册
查看: 1625|回复: 5

[已解决]请问如何用写个爬虫提取这个网页中的内容?

[复制链接]
发表于 2019-4-20 15:04:13 | 显示全部楼层 |阅读模式

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

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

x
大家好,麻烦大家帮我看看该如何提取这个网也中的元素,我看了小甲鱼的爬取豆瓣电影TOP250的爬虫视频后自己也模仿写了一个,但是提取失败....主要遇到的问题如下: 通过浏览器的查看器和目测,我发现我需要的数据是存放在一个id=resultsContainer 的标签下,但是输出这部分内容之后我发现这里面并没有包含我需要的数据,也就没有办法提取我需要的数据了,请问为什么会这样?
           


网址如下:
https://www.investing.com/stock-screener/?sp=country::5|sector::a|industry::a|equityType::a%3Ceq_market_cap;1

我需要提取这个网页下的Symbol, Exchange, Last这三项内容,通过F12,我可以看到这些数据在网页里的存放格式是这样的.
<td data-column-name="viewData.symbol" class="left">AAPL</td>
<td data-column-name="exchange_trans" class="left">NASDAQ</td>
<td data-column-name="last">203.86</td>

假如我能定位到这些数据,又应该用哪些标签来提取它们呢?因为我python还在入门中,html的也不太懂,所以问了很多小白问题,因为不能发图,所以描述的也不是很清楚....还请各位大佬见谅。

我写的代码如下:
  1. import requests
  2. import bs4
  3. url = 'https://www.investing.com/stock-screener/?sp=country::5|sector::a|industry::a|equityType::a|exchange::2|last::2,100|avg_volume::0,1000000<turnover_volume;1'
  4. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
  5. res = requests.get(url,headers=headers)
  6. soup = bs4.BeautifulSoup(res.text,'html.parser')
  7. trs = soup.find_all('table', id='resultsTable')
  8. print(trs) #用来查看自己提取到了哪些内容
  9. for each in trs: #原本想要用for循环来提取想要的数据,不过现在发现提取的东西不对,可以暂时先不管这个for循环。
  10.    print(type(each))
  11.    print(each.text)
复制代码



最佳答案
2019-4-20 16:50:58
  1. from selenium import webdriver
  2. import re


  3. browser = webdriver.Firefox()
  4. browser.get("https://www.investing.com/stock-screener/?sp=country::5|sector::a|industry::a|equityType::a|exchange::a%3Ceq_market_cap;1")
  5. text = browser.page_source
  6. name = re.findall(r'<td.*?class="symbol left bold elp".*?>.*?<a.*?>(.*?)</a>',text,re.DOTALL)
  7. symbol = re.findall(r'<td.*?data-column-name="viewData.*?symbol".*?>(.*?)</td>',text,re.DOTALL)[1:]
  8. last = re.findall(r'<td\sdata-column-name="last">(.*?)</td>',text,re.DOTALL)
  9. chg = re.findall(r'<td\sdata-column-name="pair_change_percent">(.*?)</td>',text,re.DOTALL)
  10. market_cap = re.findall(r'<td\sdata-column-name="eq_market_cap">(.*?)</td>',text,re.DOTALL)
  11. vol = re.findall(r'<td\sdata-column-name="turnover_volume">(.*?)</td>',text,re.DOTALL)
  12. all_text = list(zip(name,symbol,last,chg,market_cap,vol))
  13. all = []
  14. for each_text in all_text:
  15.     name,symbol,last,chg,market_cap,vol=each_text
  16.     every_text = {
  17.         "name":name,
  18.         "symbol":symbol,
  19.         "last":last,
  20.         "chg":chg,
  21.         "market_cap":market_cap,
  22.         "vol":vol
  23.     }
  24.     all.append(every_text)
  25. for each in all:
  26.     print(each,end = "\n")
  27. browser.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-20 15:51:35 | 显示全部楼层
在群里找到了答案,因为网页是动态加载的,所以不能直接爬....要想其它办法...爬虫真是难啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 16:50:58 | 显示全部楼层    本楼为最佳答案   
  1. from selenium import webdriver
  2. import re


  3. browser = webdriver.Firefox()
  4. browser.get("https://www.investing.com/stock-screener/?sp=country::5|sector::a|industry::a|equityType::a|exchange::a%3Ceq_market_cap;1")
  5. text = browser.page_source
  6. name = re.findall(r'<td.*?class="symbol left bold elp".*?>.*?<a.*?>(.*?)</a>',text,re.DOTALL)
  7. symbol = re.findall(r'<td.*?data-column-name="viewData.*?symbol".*?>(.*?)</td>',text,re.DOTALL)[1:]
  8. last = re.findall(r'<td\sdata-column-name="last">(.*?)</td>',text,re.DOTALL)
  9. chg = re.findall(r'<td\sdata-column-name="pair_change_percent">(.*?)</td>',text,re.DOTALL)
  10. market_cap = re.findall(r'<td\sdata-column-name="eq_market_cap">(.*?)</td>',text,re.DOTALL)
  11. vol = re.findall(r'<td\sdata-column-name="turnover_volume">(.*?)</td>',text,re.DOTALL)
  12. all_text = list(zip(name,symbol,last,chg,market_cap,vol))
  13. all = []
  14. for each_text in all_text:
  15.     name,symbol,last,chg,market_cap,vol=each_text
  16.     every_text = {
  17.         "name":name,
  18.         "symbol":symbol,
  19.         "last":last,
  20.         "chg":chg,
  21.         "market_cap":market_cap,
  22.         "vol":vol
  23.     }
  24.     all.append(every_text)
  25. for each in all:
  26.     print(each,end = "\n")
  27. browser.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 16:51:58 | 显示全部楼层
是这种数据吧
  1. {'name': 'Apple', 'symbol': 'AAPL', 'last': '203.86', 'chg': '0.36%', 'market_cap': '967.40B', 'vol': '24.20M'}
  2. {'name': 'Microsoft', 'symbol': 'MSFT', 'last': '123.37', 'chg': '1.31%', 'market_cap': '946.52B', 'vol': '27.99M'}
  3. {'name': 'Amazon.com', 'symbol': 'AMZN', 'last': '1861.69', 'chg': '-0.17%', 'market_cap': '916.05B', 'vol': '2.75M'}
  4. {'name': 'Alphabet A', 'symbol': 'GOOGL', 'last': '1241.47', 'chg': '0.11%', 'market_cap': '863.05B', 'vol': '1.24M'}
  5. {'name': 'Alphabet C', 'symbol': 'GOOG', 'last': '1236.37', 'chg': '0%', 'market_cap': '859.51B', 'vol': '1.33M'}
  6. {'name': 'Berkshire Hathaway', 'symbol': 'BRKa', 'last': '315330', 'chg': '-0.22%', 'market_cap': '518.89B', 'vol': '91.00'}
  7. {'name': 'Berkshire Hathaway B', 'symbol': 'BRKb', 'last': '209.99', 'chg': '-0.18%', 'market_cap': '518.89B', 'vol': '2.59M'}
  8. {'name': 'Facebook', 'symbol': 'FB', 'last': '178.28', 'chg': '-0.28%', 'market_cap': '508.71B', 'vol': '11.66M'}
  9. {'name': 'Alibaba', 'symbol': 'BABA', 'last': '186.94', 'chg': '-0.33%', 'market_cap': '484.58B', 'vol': '7.88M'}
  10. {'name': 'Tencent ADR', 'symbol': 'TCEHY', 'last': '50.37', 'chg': '0.2%', 'market_cap': '475.34B', 'vol': '2.29M'}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 16:52:30 | 显示全部楼层
慢慢学吧 加油加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-4-21 00:47:41 | 显示全部楼层

感谢大佬,就是这种数据,群里就是说需要用到selenium来实现,没想到用了这个库实现起来这么容易,你的代码写的也简单易懂,太谢谢了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 04:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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