2

가 명확하지 않았다 나는 내 이전 게시물을 삭제 를 사용하는어떻게 영문 동적 웹 사이트의 드롭 다운 메뉴에서 루프 파이썬 요청과 BeautifulSoup로하고 긁어 데이터

이 스택 오버 플로우 내 첫 번째 게시물입니다. 내 질문에 대해 나는이 또한 Data Scraping, aspx이 게시물 "asp.net 페이지로 파이썬을 사용하여 요청"을 읽고, 나는 내가 무엇을 찾고 있었 발견하지만 약간의 도움

내 문제는 내가 스크랩 웹하려는된다 필요 웹 사이트 http://up-rera.in/, 그것은 aspx 동적 웹 사이트입니다. 요소 웹 사이트를 검사 클릭하면이있는 다른 링크에 던져 작성자 :이 영문

을 사용 http://upreraportal.cloudapp.net/View_projects.aspx

내 쿼리 내가 내려 모든 드롭 루프 예를 들어, 페이지의 콘텐츠를 검색을 클릭 할 수있는 방법입니다 내가 긁어 아그라 수 있어요하고 페이지를 얻을 수있었습니다이 내 학습 단계이기 때문에 그래서 난 현재 페이지 정보를 얻기 위해 현재의 셀레늄을 피하는입니다

을 자세히 설명합니다.

import requests 
from bs4 import BeautifulSoup 
import os 
import time 
import csv 

final_data = [] 

url = "http://upreraportal.cloudapp.net/View_projects.aspx" 

headers= {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 
      'Content-Type':'application/x-www-form-urlencoded', 
      'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'} 

formfields={'__VIEWSTATE':'9VAv5iAKM/uLKHgQ6U91ShYmoKdKfrPqrxB2y86PhSY8pOPAulcgfrsPDINzwmvXGr+vdlE7FT6eBQCKtAFsJPQ9gQ9JIBTBCGCIjYwFuixL3vz6Q7R0OZTH2cwYmyfPHLOqxh8JbLDfyKW3r3e2UgP5N/4pI1k6DNoNAcEmNYGPzGwFHgUdJz3LYfYuFDZSydsVrwSB5CHAy/pErTJVDMmOackTy1q6Y+TNw7Cnq2imnKnBc70eldJn0gH/rtkrlPMS+WP3CXke6G7nLOzaUVIlnbHVoA232CPRcWuP1ykPjSfX12hAao6srrFMx5GUicO3Dvpir+z0U1BDEjux86Cu5/aFML2Go+3k9iHiaS3+WK/tNNui5vNAbQcPiZrnQy9wotJnw18bfHZzU/77uy22vaC+8vX1cmomiV70Ar33szSWTQjbrByyhbFbz9PHd3IVebHPlPGpdaUPxju5xkFQIJRnojsOARjc76WzTYCf479BiXUKNKflMFmr3Fp5S3BOdKFLBie1fBDgwaXX4PepOeZVm1ftY0YA4y8ObPxkJBcGh5YLxZ4vJr2z3pd8LT2i/2fyXJ9aXR9+SJzlWziu9bV8txiuJHSQNojr10mQv8MSCUAKUjT/fip8F3UE9l+zeQBOC++LEeQiTurHZD0GkNix8zQAHbNpGLBfvgocXZd/4KqqnBCLLwBVQobhRbJhbQJXbGYNs6zIXrnkx7CD9PjGKvRx9Eil19Yb5EqRLJQHSg5OdwafD1U+oyZwr3iUMXP/pJw5cTHMsK3X+dH4VkNxsG+KFzBzynKPdF17fQknzqwgmcQOxD6NN6158pi+9cM1UR4R7iwPwuBCOK04UaW3V1A9oWFGvKLls9OXbLq2DS4L3EyuorEHnxO+p8rrGWIS4aXpVVr4TxR3X79j4i8OVHhIUt8H+jo5deRZ6aG13+mXgZQd5Qu1Foo66M4sjUGs7VUcwYCXE/DP/NHToeU0hUi0sJs7+ftRy07U2Be/93TZjJXKIrsTQxxeNfyxQQMwBYZZRPPlH33t3o3gIo0Hx18tzGYj2v0gaBb+xBpx9mU9ytkceBdBPnZI1kJznArLquQQxN3IPjt6+80Vow74wy4Lvp7D+JCThAnQx4K8QbdKMWzCoKR63GTlBwLK2TiYMAVisM77XdrlH6F0g56PlGQt/RMtU0XM1QXgZvWr3KJDV8UTe0z1bj29sdTsHVJwME9eT62JGZFQAD4PoiqYl7nAB61ajAkcmxu0Zlg7+9N9tXbL44QOcY672uOQzRgDITmX6QdWnBqMjgmkIjSo1qo/VpUEzUXaVo5GHUn8ZOWI9xLrJWcOZeFl0ucyKZePMnIxeUU32EK/NY34eE6UfSTUkktkguisYIenZNfoPYehQF9ASL7t4qLiH5jca4FGgZW2kNKb3enjEmoKqbWDFMkc8/1lsk2eTd/GuhcTysVSxtvpDSlR0tjg8A2hVpR67t2rYm8iO/L1m8ImY48=', 
      '__VIEWSTATEGENERATOR':'4F1A7E70', 
      '__EVENTVALIDATION':'jVizPhFNJmo9F/GVlIrlMWMsjQe1UKHfYE4jlpTDfXZHWu9yAcpHUvT/1UsRpbgxYwZczJPd6gsvas8ilVSPkfwP1icGgOTXlWfzykkU86LyIEognwkhOfO1+suTK2e598vAjyLXRf555BXMtCO+oWoHcMjbVX2cHKtpBS1GyyqyyVB8IchAAtDEMD3G5bbzhvof6PX4Iwt5Sv1gXkHRKOR333OcYzmSGJvZgLsmo3qQ+5EOUIK5D71x/ZENmubZXvwbU0Ni6922E96RjCLh5cKgFSne5PcRDUeeDuEQhJLyD04K6N45Ow2RKyu7HN1n1YQGFfgAO3nMCsP51i7qEAohXK957z3m/H+FasHWF2u05laAWGVbPwT35utufotpPKi9qWAbCQSw9vW9HrvN01O97scG8HtWxIOnOdI6/nhke44FSpnvY1oPq+BuY2XKrb2404fKl5EPR4sjvNSYy1/8mn6IDH0eXvzoelNMwr/pKtKBESo3BthxTkkx5MR0J42qhgHURB9eUKlsGulAzjF27pyK4vjXxzlOlHG1pRiQm/wzB4om9dJmA27iaD7PJpQGgSwp7cTpbOuQgnwwrwUETxMOxuf3u1P9i+DzJqgKJbQ+pbKqtspwYuIpOR6r7dRh9nER2VXXD7fRfes1q2gQI29PtlbrRQViFM6ZlxqxqoAXVM8sk/RfSAL1LZ6qnlwGit2MvVYnAmBP9wtqcvqGaWjNdWLNsueL6DyUZ4qcLv42fVcOrsi8BPRnzJx0YiOYZ7gg7edHrJwpysSGDR1P/MZIYFEEUYh238e8I2EAeQZM70zHgQRsviD4o5r38VQf/cM9fjFii99E/mZ+6e0mIprhlM/g69MmkSahPQ5o/rhs8IJiM/GibjuZHSNfYiOspQYajMg0WIGeKWnywfaplt6/cqvcEbqt77tIx2Z0yGcXKYGehmhyHTWfaVkMuKbQP5Zw+F9X4Fv5ws76uCZkOxKV3wj3BW7+T2/nWwWMfGT1sD3LtQxiw0zhOXfY1bTB2XfxuL7+k5qE7TZWhKF4EMwLoaML9/yUA0dcXhoZBnSc', 
      'ctl00$ContentPlaceHolder1$DdlprojectDistrict':'Agra', 
      'ctl00$ContentPlaceHolder1$txtProject':'', 
      'ctl00$ContentPlaceHolder1$btnSearch':'Search'} 

#here in form details check agra , i am able to scrape one city only, 
# how to loop for all cities 
r = requests.post(url, data=formfields, headers=headers) 
data=r.text 

soup = BeautifulSoup(data, "html.parser") 

get_list = soup.find_all('option') #gets list of all <option> tag 
for element in get_list : 
    cities = element["value"] 
    #final.append(cities) 
    #print(final) 

get_details = soup.find_all("table", attrs={"id":"ContentPlaceHolder1_GridView1"}) 

for details in get_details: 
    text = details.find_all("tr")[1:] 
    for tds in text: 
     td = tds.find_all("td")[1] 
     rera = td.find_all("span") 
     rnumber = "" 
     for num in rera: 
      rnumber = num.text 
      print(rnumber) 

답변

1

가 아래 코드를 사용해보십시오 :

제대로 나를 인도하고 저 아래에 언급되어 내 코드를 수정하는 데 도움이 될 수있는 일이있다. 그것은 당신에게 모든 결과를 줄 것입니다. 약간의 트 위치가 필요했습니다. 방금 드롭 다운 메뉴에서 다른 이름을 긁어내어 루프에서 사용하여 모든 데이터를 하나씩 가져올 수 있습니다. 나는 몇 줄을 추가하는 것을 제외하고는 다른 것을 주목했다. 함수 내에서 코드를 래핑하면 코드가 더 좋을 수 있습니다.

Btw, 두 개의 거대한 문자열을 두 개의 변수에 넣었으므로 걱정할 필요가 없으며 조금 더 슬림하게 만들 수 있습니다. viewstate가 = soup.select ("#__의 ViewState") [0] [ '값'] EVENTVALIDATION = 수프 :이 설명 할 수 있다면,

import requests 
from bs4 import BeautifulSoup 

url = "http://upreraportal.cloudapp.net/View_projects.aspx" 
response = requests.get(url).text 
soup = BeautifulSoup(response,"lxml") 

VIEWSTATE = soup.select("#__VIEWSTATE")[0]['value'] 
EVENTVALIDATION = soup.select("#__EVENTVALIDATION")[0]['value'] 

for title in soup.select("#ContentPlaceHolder1_DdlprojectDistrict [value]")[:-1]: 
    search_item = title.text 
    # print(search_item) 

    headers= {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 
       'Content-Type':'application/x-www-form-urlencoded', 
       'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'} 

    formfields = {'__VIEWSTATE':VIEWSTATE, #Put the value in this variable 
       '__VIEWSTATEGENERATOR':'4F1A7E70', 
       '__EVENTVALIDATION':EVENTVALIDATION, #Put the value in this variable 
       'ctl00$ContentPlaceHolder1$DdlprojectDistrict':search_item, #this is where your city name changes in each iteration 
       'ctl00$ContentPlaceHolder1$txtProject':'', 
       'ctl00$ContentPlaceHolder1$btnSearch':'Search'} 

    #here in form details check agra , i am able to scrape one city only, 
    # how to loop for all cities 
    res = requests.post(url, data=formfields, headers=headers).text 
    soup = BeautifulSoup(res, "html.parser") 

    get_list = soup.find_all('option') #gets list of all <option> tag 
    for element in get_list : 
     cities = element["value"] 
     #final.append(cities) 
     #print(final) 

    get_details = soup.find_all("table", attrs={"id":"ContentPlaceHolder1_GridView1"}) 

    for details in get_details: 
     text = details.find_all("tr")[1:] 
     for tds in text: 
      td = tds.find_all("td")[1] 
      rera = td.find_all("span") 
      rnumber = "" 
      for num in rera: 
       rnumber = num.text 
       print(rnumber) 
+0

안녕하세요, 한 가지 : 이 정류 코드 .select ("#__ EVENTVALIDATION") [0] [ 'value'] #은 무엇을 사용합니까? 및 soup.select ("# ContentPlaceHolder1_DdlprojectDistrict [value]") [: - 1] – James

+0

마우스 오른쪽 버튼을 클릭하면보기 페이지 소스 옵션이 표시됩니다. 이것을 선택하고 Ctrl + F 단추를 사용하여 검색 상자를 찾으십시오. 이제 "_VIEWSTATE"를 searchbox에 넣고 이동하십시오. 그런 다음 코드에 사용한 ID를 찾습니다. 그리고 관련 드롭 다운 메뉴까지 모든 도시 이름을 긁어 내고 for 루프에있는 이름을 사용하여 각 도시의 데이터를 다룰 수 있어야합니다. 그게 전부 야. – SIM

+0

@james, 각 루프에서 도시 이름이 바뀌는 행을 추가 한 업데이트 된 답변을 참조하십시오. 감사. – SIM

관련 문제