我试图用Python BeautifulSoup抓取这个网站。我的代码首先从页面中获取所有链接。在获取链接时,它会从原始链接中剥离“&”符号和参数。我想知道为什么?有人知道吗?我在这里输出了代码和输出。
from bs4 import BeautifulSoup as bs
import requests
url = requests.get ("http://mnregaweb4.nic.in/netnrega/demand_emp_demand.aspx?lflag=eng&file1=dmd&fin=2017-2018&fin_year=2017-2018&source=national&Digest=x44uSVqhiyzomN66Te0ELQ")
soup = bs(url.text, 'xml')
state= soup.find(id = "t1")
state_links = []
for link in soup.find_all('a', href= True):
state_links.append(link['href'])
state_links = [e for e in state_links if e not in ("javascript:history.go(-1);", "http://164.100.129.6/netnrega/MISreport4.aspx?fin_year=2013-2014rpt=RP&source=national", "javascript:__doPostBack('ctl00$ContentPlaceHolder1$LinkButton1','')")]
for dis_link in state_links:
# print (dis_link)
link_new = "http://mnregaweb4.nic.in/netnrega/"+dis_link
print (link_new)
输出:
实际链接: http://mnregaweb4.nic.in/netnrega/demand_emp_demand.aspx?file1=dmd & page1 = s& lflag = eng& state_name = ANDHRA + PRADESH&安培;的 STATE_CODE = 02&安培;的 fin_year =二○一七年至2018年&安培;源=国家&安培;文摘= 4jL5hchs + iT7xqB6T / UXzw
(已删除链接中缺少代码中突出显示的内容)
答案 0 :(得分:1)
此问题与Beautifulsoup中使用的解析器有关。
尝试
soup = bs(url.text, 'html.parser')
或
soup = bs(url.text, 'lxml')
您可能需要安装一些特定的解析器,请参阅此chapter of the doc。
答案 1 :(得分:1)
可能是因为您尝试使用'xml'解析它,而是尝试使用'html.parser'解析它,
我使用以下代码获得以下结果:
from bs4 import BeautifulSoup as bs
import requests
url = requests.get ("http://mnregaweb4.nic.in/ne....")
soup = bs(url.text, 'html.parser')
state_links = []
for link in soup.find_all('a', href=True):
state_links.append(link['href'])
print(state_links)
# 'demand_emp_demand.aspx?file1=dmd&page1=s&lflag=eng&state_name=ANDHRA+PRADESH&state_code=02&fin_year=2017-2018&source=national&Digest=4jL5hchs+iT7xqB6T/UXzw'