我正在学习网络抓取,我一直在努力编写一个程序,从Steam的网站上提取信息作为练习.
我想编写一个程序,只访问每个前10名畅销游戏的页面并提取一些内容,但我的程序只是在尝试访问M级游戏时被重定向到年龄检查页面.
我的程序看起来像这样:
front_page = urlopen('http://store.steampowered.com/').read()
bs = BeautifulSoup(front_page, 'html.parser')
top_sellers = bs.select('#tab_topsellers_content a.tab_item_overlay')
for item in top_sellers:
game_page = urlopen(item.get('href'))
bs = BeautifulSoup(game_page.read(), 'html.parser')
#Now I'm on the age check page :(
Run Code Online (Sandbox Code Playgroud)
我不知道如何通过年龄检查,我已经尝试通过发送POST请求来填写年龄检查,如下所示:
post_params = urlencode({'ageDay': '1', 'ageMonth': 'January', 'ageYear': '1988', 'snr': '1_agecheck_agecheck__age-gate'}).encode('utf-8')
page = urlopen(agecheckurl, post_params)
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我仍然在年龄检查页面.任何可以帮助我的人,我怎么能超越它?
我有一个问题,我需要一个数据结构,让我按排序顺序存储一堆订单对象(有价格和数量),以便我可以轻松检索价格最低的那个.我需要的唯一操作是"插入"和"检索最小",这使得优先级队列看起来是一个很好的选择,但问题是我还需要跟踪重复项的插入顺序,以便它始终是第一个插入的副本首先检索.重复只是在这种情况下具有相同价格的订单.
Java PriorityQueue类似乎没有对重复项的检索顺序作出任何承诺,因此我需要一些其他选择.你们会推荐什么?
在阅读了一些关于堆/优先级队列之后,我最近自己实现了一个.之后我决定将我的实现性能与我在书中找到的性能进行比较,结果对我来说有点混乱.看起来两种实现的插入方法之间存在巨大的性能差异.
我用这段代码来测试两个堆:
Random rnd = new Random();
long startTime = System.currentTimeMillis();
for(int i = 0; i < 1_000_000_0; i++) heap.insert(rnd.nextInt(1000));
System.out.println(System.currentTimeMillis() - startTime);
Run Code Online (Sandbox Code Playgroud)
当我使用我的堆实现运行它时,我得到大约600ms的结果.当我用本书的实现来运行它时,我得到了大约1900ms.差异怎么可能这么大?当然,我的实施肯定有问题.
我的实施:
public class Heap<T extends Comparable<? super T>> {
private T[] array = (T[])new Comparable[10];
private int size = 0;
public void insert(T data) {
if(size+1 > array.length) expandArray();
array[size++] = data;
int pos = size-1;
T temp;
while(pos != 0 && array[pos].compareTo(array[pos/2]) < 0) {
temp = array[pos/2];
array[pos/2] = array[pos];
array[pos] = temp;
pos …Run Code Online (Sandbox Code Playgroud) 我有这个我编写的python代码:
from math import *
limit = 100000
primes = [2]
for i in range(3, limit+1, 2):
is_prime = True
for j in range(3, floor(sqrt(i)), 2):
if i % j == 0:
is_prime = False
break
if is_prime: primes.append(i)
print(len(primes))
Run Code Online (Sandbox Code Playgroud)
它说有9676个素数小于10万,当它应该是9592.如果我floor(sqrt(i))用公正替换它给出正确的答案i,但那时它非常慢.为什么我的算法不起作用?
java ×2
python ×2
algorithm ×1
heap ×1
performance ×1
primes ×1
python-3.5 ×1
python-3.x ×1
web-scraping ×1